UVa 11111 - Generalized Matrioshkas
2012-08-01 13:54
344 查看
这个题算是比较抽象的, 相当于“括号平衡”那个题的加强版,首先要用栈判断正负数字平衡,其次在判断每个(括号)里的直接套的那层正数(或是负数之和的绝对值)小于最外层数字 ~
代码如下:
代码如下:
#include<stdio.h> #include<stdlib.h> #include<string.h> #include<math.h> int stack[10000],sum[10000]; // 需要用到两个数组,一个存括号内直接数字之和,另一个为数字栈 int Num_Balance(int *a, int ct) { int i,top = 0; memset(stack,0,sizeof(stack)); memset(sum,0,sizeof(sum)); for(i=0; i < ct; i++) { if(a[i]<0) { sum[top] -= a[i]; // 将数字加到相应的范围内的和上(这里和下面的“ sum[top--] = 0;”的处理是比较难想的,花了点时间) stack[++top] = a[i]; //将数字压入栈内 } else { if(-stack[top] != a[i]) return 0; // 判断正负平衡 if(sum[top] >= a[i]) return 0; // 判断数字和 sum[top--] = 0; // 数字出栈相应位置的和归 0 } } return 1; } int main() { #ifdef state freopen("sample.txt","r",stdin); #endif int a[10000],num; while(scanf("%d",&num)!=EOF) { int ct = 0, flag = 0; char c; while(1) { a[ct++] = num; c=getchar(); if(c == '\n') break; scanf("%d",&num); } if(ct % 2) // 若数字个数为奇数,直接判断为“Try again”。 flag = 0; else flag = Num_Balance(a,ct); if(!flag) puts(":-( Try again."); else puts(":-) Matrioshka!"); } return 0; }
相关文章推荐
- UVa 11111 - Generalized Matrioshkas
- UVA 11111 - Generalized Matrioshkas
- UVa 11111 Generalized Matrioshkas
- Uva 11111 - Generalized Matrioshkas//栈
- uva-11111 Generalized Matrioshkas
- UVA 11111 一般XX
- uva 11111 Generalized Matrioshkas
- UVA - 11111 Generalized Matrioshkas
- uva 11111 - Generalized Matrioshkas
- Generalized Matrioshkas UVA 11111
- uva 11111
- UVa 11111 - Generalized Matrioshkas
- uva 11111
- UVa 11111 Generalized Matrioshkas
- UVA - 11111 Generalized Matrioshkas
- UVa 11111 一般Matrioshka 及 scanf 处理一行
- UVA 11111 Generalized Matrioshkas
- uva 11111
- UVA-11111 Generalized Matrioshkas
- UVa 11111 - Generalized Matrioshkas