POJ 1472 Instant Complexity

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

ContractedBlock.gif ExpandedBlockStart.gif 代码
 
   
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 }

 

 

转载于:https://www.cnblogs.com/ltang/archive/2011/01/17/1937738.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值