POJ 1472 Instant Complexity

模拟题:递归求解,有点像语法分析器

代码
   
     
1 #include < iostream >
2   using namespace std;
3   char ch[ 10 ];
4   int solve( int * exps)
5 {
6 scanf( " %s " , ch);
7 if (ch[ 0 ] == ' E ' ) return 0 ;
8 if (ch[ 0 ] == ' B ' )
9 while (solve(exps));
10 else if (ch[ 0 ] == ' L ' )
11 {
12 scanf( " %s " , ch);
13 int i,s,t = - 1 ,texps[ 11 ] = { 0 };
14 if (ch[ 0 ] != ' n ' )t = atoi(ch);
15 while (solve(texps));
16 if (t ==- 1 ){
17 for (i = 10 ;i > 0 ;i -- )texps[i] = texps[i - 1 ];
18 texps[ 0 ] = 0 ;
19 }
20 else
21 for (i = 0 ;i < 11 ;i ++ )texps[i] *= t;
22 for (i = 0 ;i < 11 ;i ++ )exps[i] += texps[i];
23 }
24 else
25 {
26 scanf( " %s " , ch);
27 exps[ 0 ] += atoi(ch);
28 return solve(exps);
29 }
30 return 1 ;
31 }
32 int main()
33 {
34 int n,i,j,t, exps[ 11 ];
35 scanf( " %d " , & n);
36 for (i = 1 ;i <= n;i ++ )
37 {
38 memset(exps, 0 , sizeof (exps));
39 solve(exps);
40 printf( " Program #%d\nRuntime = " , i);
41 for (t = 0 ,j = 10 ;j >= 0 ;j -- )
42 if (exps[j] != 0 )
43 {
44 t ++ ;
45 if (t != 1 )printf( " + " );
46 if (exps[j] != 1 || j == 0 )printf( " %d " , exps[j]);
47 if (exps[j] != 1 && j > 0 )printf( " * " );
48 if (j > 1 )printf( " n^%d " , j);
49 if (j == 1 )printf( " n " );
50 }
51 if ( ! t)printf( " 0 " );
52 printf( " \n\n " );
53 }
54 return 0 ;
55 }

 

 

你可能感兴趣的:(exit)