[解题报告]Marvelous Mazes
题目大意
题目原文:http://uva.onlinejudge.org/external/4/445.pdf
背景
题目很简单就是制作一个迷宫,后面字符出现的次数会等于前面出现数字之和,'b'会被空格代替,'!'则是'\n'代替,'*'则不改变。
Sample Input
1T1b5T!1T2b1T1b2T!1T1b1T2b2T!1T3b1T1b1T!3T3b1T!1T3b1T1b1T!5T1*1T
11X21b1X
4X1b1X
Sample Output
T TTTTT
T T TT
T T TT
T T T
TTT T
T T T
TTTTT*T
XX X
XXXX X
算法:
一定要注意的是输入一行,这一行的迷宫就会被输出,而不是等所有的都输入完成才出现迷宫,我一开始就纠结在这里很久。还有这道题也许有人和我一样一看到一大串的字符串就想到用字符串来解决问题,但是将一个个字符拆解下来解决也许会好得多,所以充分利用输入的缓冲区的作用,一个个字符进行读取,并且读取一个输出一个结果,还有这道题让我明白要充分利用c环境中已经有得函数,这样可以提高代码的效率。
代码:这里附上我的代码,你可以去这里提交你的代码验证你的代码是否正确,
1 #include<stdio.h> 2 #include<ctype.h> 3 int main(void) 4 { 5 char ch; 6 int count=0,i=0; 7 8 while(scanf("%c",&ch)!=EOF) 9 { 10 if(isdigit(ch)) 11 { 12 count += ch - '0'; 13 continue; 14 } 15 else if(isupper(ch)||ch=='b'||ch=='*') 16 { 17 for(i=0;i <count;i++) 18 { 19 if(ch=='b') 20 printf(" "); 21 else 22 printf("%c",ch); 23 } 24 count=0; 25 } 26 if(ch=='!'||ch=='\n') 27 printf("\n"); 28 } 29 return 0; 30 }