题目:1到N的数字,在中间增长‘+’、‘-’、‘ ’,使算术式值为零。ide
例如:N=7,1-23-45+67=0;spa
思路:string
N个数之间须要加入N-1个符号,每一个符号有三种可能,进行穷举,计算算式的结果,结果为零的话输出,符号肯定后要先去掉空格,获得实际参加运算的数字。it
- char s[20]/*除去空格后的字符*/,q[3]={'+','-','.'},gg[20];//gg为符号集
- int cnt=0,n,bb[20];//bb为实际运算的数字
- void dfs(int u)
- {
- if(u==n-1)
- {
- int t=1;
- bb[0]=1;
- int k=0;
- for(int i=0;i<n-1;i++)
- {
- if(gg[i]=='.')
- {
- if(t+1<10)
- bb[k]=bb[k]*10+t+1;
- else
- bb[k]=bb[k]*100+t+1;
- t++;
- }
- else
- {
- s[k]=gg[i];
- k++;
- bb[k]=t+1;
- t++;
- }
- }
- int result=bb[0];;
- for(int i=0;i<k;i++)
- {
- if(s[i]=='+')
- result+=bb[i+1];
- else if(s[i]=='-')
- result-=bb[i+1];
- }
- if(result==0&&cnt<20)
- {
- cnt++;
- cout<<bb[0];
- for(int i=0;i<k;i++)
- {
- cout<<s[i]<<bb[i+1];
- }
- cout<<endl;
- }
- }
- else
- {
- for(int i=0;i<3;i++)
- {
- gg[u]=q[i];
- dfs(u+1);
- }
- }
- }
- int main()
- {
- scanf("%d",&n);
- dfs(0);
- printf("%d\n",cnt);
- return 0;
- }
运行结果:class
7
1+2-3+4-5-6+7
1+2-3-4+5+6-7
1-2+3+4-5+6-7
1-2-3-4-5+6+7
1-23+4+5+6+7
1-23-45+67
6
请按任意键继续. . .word