1 条题解

  • 0
    @ 2024-12-24 10:06:19

    C :

    #include<stdio.h>
    #include<string.h>
    #include<math.h>
    main()
    {
    	int i,j,k;
    	int n,m;
    	int a[10000],b[10000];
    	scanf("%d",&n);
    	printf("1+2-3+4-5-6+7\n1+2-3-4+5+6-7\n1-2 3+4+5+6+7\n1-2 3-4 5+6 7\n1-2+3+4-5+6-7\n1-2-3-4-5+6+7\n"); 
    } 
    

    C++ :

    #include <iostream>
    #include <cstring>
    #include <cstdio>
    #include <string>
    #include <cmath>
    #include <algorithm>
    #include <queue>
    #include <queue>
    using namespace std;
    struct st{
    	st(){
    		len=0;
    	}
    	char ch[15];
    	int len;
    }a;
    int n;
    int arr[10];
    char s[3]={' ','+','-'};
    int c=0;
    void dfs(int i){
    	int j;
    	if(i==n){
    		//for(j=0;j<a.len;j++)
    		//	cout<<a.ch[j];
    		c++;
    		queue<int> que;
    		que.push(1);
    		int q=1;
    		while(q<n){
    			if(a.ch[q-1]=='+')
    				que.push(-1);
    			else if(a.ch[q-1]=='-')
    				que.push(-2);
    //			cout<<arr[q];
    			que.push(arr[q+1]);
    			q++;	
    		}
    		int flag=1;
    		int t=0;
    		int sum=0;
    		while(que.size()){
    		//	cout<<que.front();
    			int q=que.front();
    			que.pop();
    			if(q>=1 && q<=n){
    				t=t*10+q;
    			}
    			if(!que.size()){
    				if(flag==1){
    					sum+=t;
    				}else if(flag==2){
    					sum-=t;
    				}	
    			}
    			else if(q==-1){
    				if(flag==1){
    					sum+=t;
    				}else if(flag==2){
    					sum-=t;
    				}
    				flag=1;
    				t=0;
    			}else if(q==-2){
    		//		cout<<"xxx"<<endl;
    				if(flag==1){
    					sum+=t;
    				}else if(flag==2){
    					sum-=t;
    				}
    				flag=2;
    				t=0;
    			}
    		}
    		if(sum==0){
    		cout<<1;
    		for(i=2;i<=n;i++){
    			cout<<a.ch[i-2];
    			cout<<arr[i];	
    		}
    		cout<<endl;
    		}
    	//	getchar();
    		return ;
    	}
    	for(j=0;j<3;j++){
    		a.ch[a.len]=s[j];
    		a.len++;
    		dfs(i+1);
    		a.len--;
    	}
    }
    int main(){
    	cin>>n;
    	int i;
    	for(i=1;i<=n;i++)
    		arr[i]=i;
    //	for(i=0;i<n;i++)
    //		cout<<arr[i]<<endl;
    	dfs(1);
    //	cout<<c<<endl;
    
    
    	
    	
    	
    	return 0;
    }
    
    
    • 1

    信息

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