• UVA232 UVALive5171 POJ1888 Crossword Answers


    World Finals >> 1994 - Phoenix

    问题链接:UVA232 UVALive5171 POJ1888 Crossword Answers基础训练级的问题,用C语言编写程序。

    典型单词谜题中,计算单词个数问题。

    给网格扩充了四个方向的边界。这样可以简化程序逻辑,使得边缘格的处理逻辑与中间格的处理逻辑相同。使得判断网格是否为单词的开始网格条件统一;同时,计算行单词和列单词的逻辑也变得简单。

    另外一点就是要明确单纯开始网格的条件,以及如何计算单词的序号(序号增加的条件)。


    程序中,将边界设置为“*”,程序逻辑比较简洁。

    AC的C语言程序如下:

    /* UVA232 UVALive5171 POJ1888 Crossword Answers */
    
    #include <stdio.h>
    
    #define MAXN 10
    
    char grid[MAXN+2][MAXN+2];
    
    /* 输出行单词 */
    void rowoutput(int no, int row, int col)
    {
        printf("%3d.", no);
        while(grid[row][col] != '*')
            putchar(grid[row][col++]);
        putchar('
    ');
    }
    
    /* 输出列单词 */
    void coloutput(int no, int row, int col)
    {
        printf("%3d.", no);
        while(grid[row][col] != '*')
            putchar(grid[row++][col]);
        putchar('
    ');
    }
    
    int main(void)
    {
        int r, c, caseno=0, wcount, i, j;
    
        while(scanf("%d", &r) != EOF && r != 0) {
            /* 已经读入行,继续读入列 */
            scanf("%d", &c);
            getchar();
    
            /* 读入网格 */
            for(i=1; i<=r; i++) {
                for(j=1; j<=c; j++)
                    grid[i][j] = getchar();
                getchar();      /* '
    ' */
            }
    
            // 设置边界
            for(i=0; i<r+2; i++) {
                grid[i][0] = '*';
                grid[i][c+1] = '*';
            }
            for(i=0; i<c+2; i++) {
                grid[0][i] = '*';
                grid[r+1][i] = '*';
            }
    
            /* 计算并且输出结果 */
            if(++caseno > 1)
                printf("
    ");
            printf("puzzle #%d:
    ", caseno);
    
            /* 行计算并且输出结果 */
            printf("Across
    ");
            wcount = 0;
            for(i=1; i<=r; i++) {
                for(j=1; j<=c; j++)
                    if(grid[i][j] != '*' && (grid[i-1][j] == '*' || grid[i][j-1] == '*')) {
                        wcount++;
                        if(grid[i][j-1] == '*')
                            rowoutput(wcount, i, j);
                    }
            }
    
            /* 列计算并且输出结果 */
            printf("Down
    ");
            wcount = 0;
            for(i=1; i<=r; i++) {
                for(j=1; j<=c; j++)
                    if(grid[i][j] != '*' && (grid[i-1][j] == '*' || grid[i][j-1] == '*')) {
                        wcount++;
                        if(grid[i-1][j] == '*')
                            coloutput(wcount, i, j);
                    }
            }
        }
    
        return 0;
    }


  • 相关阅读:
    tomcat 闪退处理
    MVC的各个部分都有那些技术来实现?如何实现?
    jsp和servlet的区别、共同点、各自应用的范围?
    如何从CDN加载jQuery?
    window.onload()函数和jQuery中的document.ready()有什么区别?
    JQuery有几种选择器?
    jQuery 库中的 $() 是什么?
    JS 中 == 和 === 区别是什么?
    如何在JavaScript中每x秒调用一个函数
    undefined,null 和 undeclared 有什么区别?
  • 原文地址:https://www.cnblogs.com/tigerisland/p/7564518.html
Copyright © 2020-2023  润新知