UVa232

来源:互联网 发布:同花顺云计算 编辑:程序博客网 时间:2024/06/07 15:23

字符串处理的水题。

主要是要看清题目的output案例,down的输出是按编号增加的顺序来的,而不是竖行从左往右一行一行来输出

另外注意两个case间需要有换行,而当Across和Down为空值(即图像为全*时),需要做一个判断保证它们之间只能有一个换行


#include<stdio.h>#include<string.h>char board[50][50];int flag[100];int main(){int kase=1;int r,c;while(true){scanf("%d",&r);if(r==0) break;scanf("%d",&c);getchar();for(int i=0;i<r;i++){for(int j=0;j<c;j++)board[i][j]=getchar();getchar();}if(kase>1)printf("\n");printf("puzzle #%d:\n",kase);printf("Across\n");int count=1;for(int i=0;i<r;i++){for(int j=0;j<c;j++){if(board[i][j]!='*'){if(j-1<0||board[i][j-1]=='*'){ if(count>1) printf("\n%3d.%c",count,board[i][j]); else printf("%3d.%c",count,board[i][j]);flag[count]=i*c+j;count++;}else{ printf("%c",board[i][j]); if(i-1<0||board[i-1][j]=='*') { flag[count]=i*c+j; count++;} }}}}if(count>1) printf("\n");printf("Down\n");int sum=count-1;count=1;for(int k=1;k<=sum;k++){int i=flag[k]/c,j=flag[k]%c;int ok=0;while(i<r){if(board[i][j]!='*'){if(i-1<0||board[i-1][j]=='*'){ if(k>1) printf("\n%3d.%c",k,board[i][j]); else printf("%3d.%c",k,board[i][j]);ok=1;}else{ if(!ok) break;printf("%c",board[i][j]);}i++;}else break;}}if(sum>0) printf("\n");kase++;}return 0;}


粗心的习惯加油改正吧╮(╯_╰)╭

0 0
原创粉丝点击