字符串处理的水题。
主要是要看清题目的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;
}
粗心的习惯加油改正吧╮(╯_╰)╭