题目蛮简单,就是写起来蛮麻烦,可能有更好的写法。下面贴出代码,以作纪念。

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 }

 

posted on 2012-07-26 10:26  醉春雨  阅读(137)  评论(0)    收藏  举报