警匪110
问题描述:
匪警请拨110,即使手机欠费也可拨通!
为了保障社会秩序,保护人民群众生命财产安全,警察叔叔需要与罪犯斗智斗勇,因而需要经常性地进行体力训练和智力训练!
某批警察叔叔正在进行智力训练:
12 3 4 5 6 7 8 9 =110;
请看上边的算式,为了使等式成立,需要在数字间填入加号或者减号(可以不填,但不能填入其它符号)。之间没有填入符号的数字组合成一个数,例如:12+34+56+7-8+9 就是一种合格的填法;123+4+5+67-89 是另一个可能的答案。
请你利用计算机的优势,帮助警察叔叔快速找到所有答案。
每个答案占一行。形如:
12+34+56+7-8+9
123+4+5+67-89
......
#include<stdio.h>
#include<math.h>
#define n 8int a[9]={1,2,3,4,5,6,7,8,9};
int main()
{int sum;int ans=110;int i,j,k,x,y;int num,temp;int cnt=0;int count1,count2,count3;for(num=0;num<pow(3,n);num++){temp=num;sum=0;int flag=1;count1=a[0]; for(j=1;j<=n;j++){if(temp%3==0) //两个数字之间没有操作符 {count1=count1*10+a[j]; }if(temp%3==1) //两个数字之间的操作符为‘+’ {if(flag==1) //上一个操作符为‘+’ {sum+=count1;count1=a[j]; }if(flag==2) //上一个操作符为‘-’ {sum-=count1;count1=a[j];}flag=1;}if(temp%3==2) //两个数字之间的操作符为‘-’ {if(flag==1) //上一个操作符为‘+’ {sum+=count1;count1=a[j];}if(flag==2) //上一个操作符为‘-’ {sum-=count1;count1=a[j];}flag=2;} temp/=3; }if(flag==1)sum+=count1;if(flag==2)sum-=count1; if(sum==ans){cnt++;temp=num;for(i=0;i<n;i++){if(temp%3==0){printf("%d",a[i]);}if(temp%3==1)printf("%d+",a[i]);if(temp%3==2)printf("%d-",a[i]);temp/=3;}printf("%d\n",a[n]);}}printf("%d\n",cnt);return 0;}
for(num=0;num<pow(3,n);num++){temp=num;sum=0;int flag=1;count1=1; for(j=1;j<=n;j++){k=j+1;if(temp%3==0) //两个数字之间没有操作符 {count1=count1*10+k; }if(temp%3==1) //两个数字之间的操作符为‘+’ {if(flag==1) //上一个操作符为‘+’ {sum+=count1;count1=k; }if(flag==2) //上一个操作符为‘-’ {sum-=count1;count1=k;}flag=1;}if(temp%3==2) //两个数字之间的操作符为‘-’ {if(flag==1) //上一个操作符为‘+’ {sum+=count1;count1=k;}if(flag==2) //上一个操作符为‘-’ {sum-=count1;count1=k;}flag=2;} temp/=3; }if(flag==1)sum+=count1;if(flag==2)sum-=count1; if(sum==ans){// printf("$$$$$$$$$$\n");cnt++;temp=num;for(i=1;i<=n;i++){if(temp%3==0){printf("%d",i);}if(temp%3==1)printf("%d+",i);if(temp%3==2)printf("%d-",i);temp/=3;}printf("9\n");}
}
更多推荐
警匪110
发布评论