15 条题解

  • -2
    @ 2024-8-4 21:40:31

    算法:枚举。

    这题由于从左往右计算即可,所以无需使用栈。

    因为给定了 a,b,c,da,b,c,d,而且只需在两个空格中分别填入加减乘三种运算符中的一个运算符即可,所以最多有 99 种情况,枚举所有情况(如果结果为 dd 直接结束)求解即可。

    接下来是代码。

    #include<bits/stdc++.h>
    using namespace std;
    int a,b,c,d; 
    char c1[]={'+','-','*'}; 
    char c2[]={'+','-','*'}; //打两张表方便枚举
    int main(){
    	ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);//读入优化 
    	cin>>a>>b>>c>>d; 
    	for(int i = 0; i < 3; i++) {
    		int sum = 0; 
    		switch(c1[i]) {
    			case '+':{
    				sum+=a+b; 
    				break;
    			}
    			case '-':{
    				sum+=a-b; 
    				break; 
    			}
    			case '*':{
    				sum+=a*b; 
    				break;
    			}
    		}
    		for(int j = 0; j < 3; j++) {
    			int sum2 = sum; 
    			switch(c2[j]) {
    				case '+':{
    					sum+=c; 
    					break;
    				}
    				case '-':{
    					sum-=c; 
    					break; 
    				}
    				case '*':{
    					sum*=c; 
    					break;
    				}
    			}
    			if(sum==d) {
    				cout<<"Yes"; 
    				return 0; 
    			}
    			sum = sum2; 			
    		}
    	}
            cout<<"No"; 
    	return 0; 
    }
    

    因为 a,b,ca, b, c 上限都是 1010,可以求得结果最大为 10001000, 所以不会爆 int

    这样,本题就解决了。

    如有不足,还请指出,感谢观看。

    信息

    ID
    25
    时间
    1000ms
    内存
    512MiB
    难度
    1
    标签
    递交数
    1672
    已通过
    558
    上传者