zoukankan      html  css  js  c++  java
  • 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("
    ");
    38     printf("puzzle #%d:
    ", num++);
    39     //横向输出 
    40     printf("Across
    ");
    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("
    ");
    57             }
    58         }    
    59     }
    60     printf("Down
    ");
    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("
    ");
    79             }
    80         }    
    81     }
    82 }
    83     
    84     return 0;
    85 }

     PS

      其实这题没有必要把周围一圈涂黑,按题目要求进行判断即可,有点多此一举了

  • 相关阅读:
    X的平方根(二分)
    JavaScript(1)
    入门训练 Fibonacci数列 (水题)
    set集合容器
    deque双端队列容器
    回归分析
    cf1121d 尺取
    CF1121C 模拟
    poj3662 二分+最短路
    最短路小结
  • 原文地址:https://www.cnblogs.com/witharush/p/11423402.html
Copyright © 2011-2022 走看看