趣味算式

来源:互联网 发布:sql count用法 慢 编辑:程序博客网 时间:2024/05/01 03:21
为了保障社会秩序,保护人民群众生命财产安全,警察叔叔需要与罪犯斗智斗勇,因而需要经常性地进行体力训练和智力训练!
    某批警察叔叔正在进行智力训练:
    1 2 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 <iostream>
using namespace std;
int _a(int *a)
{
 int tmp1=0,tmp2[9] = {0},tmp3[9]={0};
 for(int i=0,j=0;i<17;i+=2){
  if(a[i] == 0){
   tmp2[j] = tmp2[j]*10+a[i+1];
  }
  if(a[i] == 1){
   tmp3[j] = 1;
   j++;
   tmp2[j] = tmp2[j]*10+a[i+1];
  }
  if(a[i] == 2){
   tmp3[j] = 2;
   j++;
   tmp2[j] = tmp2[j]*10+a[i+1];
  }
 }
 tmp1 = tmp2[0];
 for(i = 0;tmp3[i] > 0;i++){
  if(tmp3[i]==1){
   tmp1 = tmp1+tmp2[i+1];
  }
  if(tmp3[i]==2){
   tmp1 = tmp1-tmp2[i+1];
  }
 }
 return tmp1;
}
void _b(int *a)
{
 a[2]++;
 for(int i=2;i<17;i+=2){
  if(a[i]>2){
   a[i] = 0;
   a[i+2]++;
  }
 }
}
int main()
{
 int a[19]={0,1,0,2,0,3,0,4,1,5,0,6,0,7,2,8,0,9,0};
 
 for(;a[18] == 0;_b(a)){
  if(_a(a) == 110){
   for(int i=1;i<19;i++){
    if(i%2){
     cout<<a[i];
    }else{
     if(a[i] == 1)
      cout<<"+";
     if(a[i] == 2)
      cout<<"-";
    }
   }
   cout<<endl;
  }
 }
 return 0;
}
原创粉丝点击