题目蛮简单,就是写起来蛮麻烦,可能有更好的写法。下面贴出代码,以作纪念。
View Code
1 /*{ 2 ID:jzy3209981 3 PROG:zerosum 4 LANG:C++ 5 }*/ 6 #include<stdio.h> 7 #include<iostream> 8 #include<string.h> 9 #include<math.h> 10 using namespace std; 11 12 char formula[20]; 13 14 bool caculate(int n) 15 { 16 int result=0,i,num=0,bit; 17 for(i=2*n-3;i>0;i-=2) 18 { 19 switch(formula[i]) 20 { 21 case ' ': if(num==0) 22 num=formula[i+1]-48; 23 else 24 { 25 bit=(int)log10((double)num)+1; 26 num=(formula[i+1]-48)*pow(10,(double)bit)+num; 27 } 28 break; 29 case '+': if(num==0) 30 result+=(formula[i+1]-48); 31 else 32 { 33 bit=(int)log10((double)num)+1; 34 num=(formula[i+1]-48)*pow(10,(double)bit)+num; 35 result+=num; 36 num=0; 37 } 38 break; 39 case '-': if(num==0) 40 result-=(formula[i+1]-48); 41 else 42 { 43 bit=(int)log10((double)num)+1; 44 num=(formula[i+1]-48)*pow(10,(double)bit)+num; 45 result-=num; 46 num=0; 47 } 48 break; 49 } 50 } 51 if(num==0) 52 result+=formula[0]-48; 53 else 54 { 55 bit=(int)log10((double)num)+1; 56 num=(formula[i+1]-48)*pow(10,(double)bit)+num; 57 result+=num; 58 } 59 if(result==0) 60 return 1; 61 else return 0; 62 } 63 64 int main() 65 { 66 freopen ("zerosum.in","r",stdin); 67 freopen ("zerosum.out","w",stdout); 68 int n,symbol,location,i,j; 69 char ch; 70 scanf("%d",&n); 71 for(i=0;i<n;i++) 72 formula[2*i]=i+49; 73 formula[2*i-1]=NULL; 74 for(i=0;i<(int)pow(3,(double)(n-1));i++) 75 { 76 location=i; 77 for(j=2*n-3;j>0;j-=2) 78 { 79 symbol=location%3; 80 location-=symbol; 81 location/=3; 82 switch(symbol) 83 { 84 case 0:ch=' ';break; 85 case 1:ch='+';break; 86 case 2:ch='-';break; 87 } 88 formula[j]=ch; 89 } 90 if(caculate(n)) 91 printf("%s\n",formula); 92 } 93 return 0; 94 }

浙公网安备 33010602011771号