算法训练 表达式计算

问题描述

  输入一个只包含加减乖除和括号的合法表达式,求表达式的值。其中除表示整除。

输入格式

  输入一行,包含一个表达式。

输出格式

  输出这个表达式的值。

样例输入

1-2+3*(4-5)

样例输出

-4

数据规模和约定

  表达式长度不超过100,表达式运算合法且运算过程都在int内进行。

#include<bits/stdc++.h>
using namespace std;
stack<int>m;
stack<char>s;
void deal(char c)
{
    int num1,num2;
    if(c=='+'||c=='-'||c==')')
    {
        while(s.top()!='(')
        {
            num1=m.top();
            m.pop();
            num2=m.top();
            m.pop();
            switch(s.top())
            {
            case '+':
                num2+=num1;
                break;
            case '-':
                num2-=num1;
                break;
            case '*':
                num2*=num1;
                break;
            case '/':
                num2/=num1;
                break;
            }
            m.push(num2);
            s.pop();
        }
        s.push(c);
    }
    else if(c=='*'||c=='/')
    {
        while(s.top()=='*'||s.top()=='/')
        {
            num1=m.top();
            m.pop();
            num2=m.top();
            m.pop();
            switch(s.top())
            {
            case '*':
                num2*=num1;
                break;
            case '/':
                num2/=num1;
                break;
            }
            m.push(num2);
            s.pop();

        }s.push(c);
    }
    else if(c=='(')
    {
        s.push(c);
    }
}
int main()
{
    string str;
    cin>>str;
    char number[101];
    int len=0;
    str+=")";
    s.push('(');
    for(int i=0; str[i]; i++)
    {
        if(str[i]>='0'&&str[i]<='9')
        {
            number[len++]=str[i];
            continue;
        }
        number[len]='\0';
        if(number[0]!='\0')
        {
            m.push(atoi(number));
            number[0]='\0';
            len=0;
        }
        deal(str[i]);
        if(str[i]==')')
        {
            s.pop();
            s.pop();
        }
    }
    cout<<m.top()<<endl;
}

 

回答: KNN算法的数学表达式可以表示为以下形式:对于一个未知样本x,KNN算法通过计算该样本与训练集中所有样本的距离,并选择与该样本距离最近的K个训练样本。然后,根据这K个最近邻样本的标签,通过投票或者加权投票的方式来确定未知样本的标签。具体而言,对于分类问题,KNN算法可以表示为以下公式: y = mode(y_1, y_2, ..., y_K) 其中,y表示未知样本的标签,y_1, y_2, ..., y_K表示K个最近邻样本的标签,mode表示取众数操作。对于回归问题,KNN算法可以表示为以下公式: y = mean(y_1, y_2, ..., y_K) 其中,y表示未知样本的标签,y_1, y_2, ..., y_K表示K个最近邻样本的标签,mean表示取平均值操作。\[1\]\[2\]\[3\] #### 引用[.reference_title] - *1* [最简单的分类算法之一:KNN(原理解析+代码实现)](https://blog.youkuaiyun.com/Cyril_KI/article/details/107302163)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [机器学习3—分类算法之K邻近算法(KNN)](https://blog.youkuaiyun.com/ex_6450/article/details/126090631)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值