Uva232 纵横字谜的答案(Crossword Answers)

思路:

  将矩形周边一周涂黑,另开一个book数组,将初始格记录下来,横向输出的时候利用k来确定下一个输出起始格的位置,避免输出重叠的情况,纵向输出就将输出的过的起始格置为0来避免输出重叠。

AC代码

输出时注意格式printf("%3d")  输出案例输出的数字是在第三个字母下面,因此用%3d

 1 #include<stdio.h>
 2 #include<string.h>
 3 char a[12][12]; 
 4 int book[12][12];
 5 int main()
 6 {
 7     int r, c, num = 1;
 8     while(scanf("%d", &r) == 1 && r)
 9 {
10     scanf("%d", &c);
11     getchar();     //吃掉换行符 
12     int count = 1, k = 0;    
13     // 先将矩形外围一圈涂黑,这样可以将第一行一般化 
14     for(int i = 0; i < r + 2; i++)     
15     {
16         a[i][0] = '*';    // 矩形左竖边    
17         a[i][c + 1] = '*';    // 矩形右竖边
18     }
19     for(int j = 0; j < c + 2; j++)    // 先将矩形外围一圈涂黑 
20     {
21         a[0][j] = '*';    // 矩形上横边    
22         a[r + 1][j] = '*';    // 矩形下横边
23     }
24     // 输入    
25     for(int i = 1; i <= r; i++)    //input
26     {
27         for(int j = 1; j <= c; j++)
28         {
29              scanf("%c", &a[i][j]);
30              //确定起始格的数字 
31             if(((a[i][j - 1] == '*') || (a[i - 1][j] == '*')) && a[i][j] != '*')
32                 book[i][j] = count++;
33         }    
34         getchar();    //吃掉换行符 
35     }
36     if(num != 1)
37         printf("\n");
38     printf("puzzle #%d:\n", num++);
39     //横向输出 
40     printf("Across\n");
41     for(int i = 1; i <= r; i++)
42     {
43         k = 1;
44         for(int j = k; j <= c; j++)
45         {
46             if(book[i][j] != 0)
47             {
48                 printf("%3d.%c", book[i][j], a[i][j]);
49                 k = j + 1;
50                 while((k) <= c && a[i][k] !='*')
51                 {
52                     printf("%c", a[i][k]);
53                     k++;
54                 }
55                 j = k;    
56                 printf("\n");
57             }
58         }    
59     }
60     printf("Down\n");
61     for(int i = 1; i <= r; i++)
62     {
63         k = 1;
64         for(int j = 1; j <= c; j++)
65         {
66             if(book[i][j] != 0)
67             {
68                 printf("%3d.%c", book[i][j], a[i][j]);
69                 book[i][j] = 0;
70                 k = i + 1;
71                 while((k) <= r && a[k][j] !='*')
72                 {
73                     printf("%c", a[k][j]);
74                     book[k][j] = 0;
75                     k++;
76                     
77                 }    
78                 printf("\n");
79             }
80         }    
81     }
82 }
83     
84     return 0;
85 }

猜你喜欢

转载自www.cnblogs.com/witharush/p/11423402.html