1 条题解

  • 0
    @ 2023-6-11 12:24:20

    C++ :

    #include <bits/stdc++.h>
    using namespace std;
    int a[20],b[20],n,c;
    char f[20];
    string s = "+-*";
    
    /*
     1 2 3 4
     + * *
    */
    void pd(){
    	for(int i = 1;i <= n;i++){
    		b[i] = a[i];
    	}
    
    	for(int i = 1;i <= n - 1;i++){
    		if(f[i] == '*'){
    			b[i+1] = b[i+1] * b[i];
    			if(f[i-1]=='-') b[i+1] = b[i+1] * -1;
    			b[i] = 0;
    		}
    	}
    	int s = b[1];
    	for(int i = 2;i <= n;i++){
    		if(f[i-1] == '+' || f[i-1]=='*') s = s + b[i];
    		else if(f[i-1] == '-') s = s - b[i];
    	}
    	if(s == 24){
    		c++;
    	}
    }
    
    //递归填入n-1个符号,然后判断结果是否是24点 
    void dfs(int k){
    	for(int i = 0;i < s.size();i++){
    		f[k] = s[i];
    		if(k == n - 1){
    			pd();
    		}else{
    			dfs(k+1);	
    		}
    		
    	}
    }
     
    int main(){
    	cin>>n;
    	for(int i = 1;i <= n;i++){
    		cin>>a[i];
    	}
    	
    	dfs(1);
    	cout<<c;
    	return 0;
    }
    
    
    • 1

    信息

    ID
    2776
    时间
    1000ms
    内存
    128MiB
    难度
    (无)
    标签
    递交数
    0
    已通过
    0
    上传者