UVA 232 Corssword Answer
题意:输入m*n大小的字符串(里面有*,*为黑格,其他为白格),然后对它编号,编号规则为从左到右,从上往下,且左边或上面没有白格(可能是黑格或越界),如下图:
注意:
①除第一次输出答案外,其余每次输出前要加换行。
②down的输出需要按照编号的顺序输出,而不是真的按位置从上到下。
③判断结束是遇到*和访问越界,判断开始是看前一个是不是*(Cross和Down只是i,j减一的不同)和访问开始(i==0)
附上一个样例:它的cross和down分别是:
和
。
所以down的输出是从左往右,从上到下的寻找非*的位置,找到后从此位置往下输出,遇到越界和*则结束此次输出,
例如:找到A,输出A,然后找到I,输出IMPOSE,然后找到M,输出MEO。
所以判断结束是越界和*,而判断开始是*和i==0。
1 #include "stdio.h" 2 #include "stdlib.h" 3 #include "string.h" 4 int num[10][10]; 5 char str[10][10]; 6 int judge(int i,int j) 7 { 8 if(str[i][j]=='*') 9 return -1; 10 if(i==0||j==0)//边界 11 return 1; 12 if(str[i-1][j]=='*'||str[i][j-1]=='*')//左或上为* 13 return 1; 14 return 0; 15 } 16 int main() 17 { 18 int n,m,i,j,k,count=0,countNum=0,returnValue; 19 int printfNum=1; 20 char c; 21 while(scanf("%d",&m)&&m) 22 { 23 scanf("%d",&n); 24 count++; 25 // if(count!=1) 26 // printf("\n");//这两句写在这里也可以 27 printfNum=1; 28 countNum=0; 29 for(i=0;i<m;i++) 30 { 31 c=getchar();//取换行符 32 for(j=0;j<n;j++) 33 { 34 scanf("%c",&str[i][j]); 35 } 36 } 37 38 //编号 39 countNum++; 40 memset(num,0,sizeof(num));//初始化为0 41 for(i=0;i<m;i++) 42 { 43 for(j=0;j<n;j++) 44 { 45 //判断,>0->非*,-1->*,0->在边界 46 returnValue=judge(i,j); 47 if(returnValue==1) 48 { 49 num[i][j]=countNum; 50 countNum++; 51 } 52 else{ 53 if(returnValue==-1) 54 num[i][j]=-1; 55 } 56 } 57 } 58 // printf("num:\n"); 59 // for(i=0;i<m;i++) 60 // { 61 // for(j=0;j<n;j++) 62 // printf("%-3d",num[i][j]); 63 // printf("\n"); 64 // } 65 //输出结果 66 if(count!=1) 67 printf("\n"); 68 printf("puzzle #%d:\n",count); 69 printf("Across\n"); 70 for(i=0;i<m;i++) 71 { 72 for(j=0;j<n;j++) 73 { 74 if((j==0||num[i][j-1]==-1)&&num[i][j]>0) 75 { 76 printf("%3d.",num[i][j]); 77 for(k=j;k<n;k++) 78 { 79 printf("%c",str[i][k]);//如果和下面的if交换就无法判断边界了 80 if(num[i][k+1]==-1||k==n-1) 81 { 82 printf("\n"); 83 break; 84 } 85 } 86 } 87 } 88 } 89 // for(i=0;i<m;i++)//这种写法WA 90 // { 91 // for(j=0;j<n;j++) 92 // { 93 // if(printfNum==1&&num[i][j]>0) 94 // { 95 // if(num[i][j]!=1) 96 // printf("\n"); 97 // printf("%3d.",num[i][j]); 98 // printfNum=-printfNum; 99 // } 100 // if(str[i][j]!='*') 101 // { 102 // printf("%c",str[i][j]); 103 // } 104 // else 105 // { 106 // printfNum=1; 107 // } 108 // } 109 // printfNum=1; 110 // } 111 printf("\n"); 112 printfNum=1; 113 printf("Down\n"); 114 for(i=0;i<m;i++) 115 { 116 for(j=0;j<n;j++) 117 { 118 if((i==0||num[i-1][j]==-1)&&num[i][j]>=0) 119 { 120 printf("%3d.",num[i][j]); 121 for(k=i;k<m;k++) 122 { 123 printf("%c",str[k][j]); 124 if(num[k+1][j]==-1||k==m-1) 125 { 126 printf("\n"); 127 break; 128 } 129 } 130 } 131 } 132 } 133 134 } 135 return 0; 136 }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步