[UVA232]Crossword Answers

来源:互联网 发布:java模板引擎排行 编辑:程序博客网 时间:2024/04/27 21:31

吸取了上一次的经验,这道题一共提交了两次得到AC(好开心,第一次这么少的次数就A了)。
注意事项:
1.输入上,这次非常的严格。输出上还是严格的按照要求来, 比如最后没有另外的空行啊, 序号的输出可以用%3d来输出(没尝试过其他的,scanf(“%3dxxxx”)通过了)。

技巧:
1.在CROSSWORD的后面一列和最下面一列用’*’填充,来简化输出的复杂度。
2.虽然题目要求排序,但是不一定要读出来每个单词之后排序,鉴于题目的数据量很小(10×10),可以遍历每个格子,因为序号是自左向右自上而下排列的,所以只要按照这个顺序遍历即可。

最后附上代码。

#include <stdio.h>int main(void){    int puzzle_num[11][11] = { 0 };    char puzzle[11][11];    int count_puzzle, count_total, total_row, total_column, count_row, count_column, temp_row;    count_puzzle = 0;    while (scanf("%d", &total_row))    {        if (total_row == 0)            break;        scanf(" %d", &total_column);        while (getchar() != '\n');        if (count_puzzle++ != 0)            printf("\n");        printf("puzzle #%d:\n", count_puzzle);        for (count_row = 0; count_row < total_row; count_row++)        {            gets(puzzle[count_row]);            puzzle[count_row][total_column] = '*';        }        for (count_column = 0; count_column < total_column; count_column++)            puzzle[total_row][count_column] = '*';        for (count_total = 1, count_row = 0; count_row < total_row; count_row++)            for (count_column = 0; count_column < total_column; count_column++)                if (count_row - 1 < 0 || count_column - 1 < 0 || puzzle[count_row - 1][count_column] == '*' || puzzle[count_row][count_column - 1] == '*')                    if (puzzle[count_row][count_column] != '*')                        puzzle_num[count_row][count_column] = count_total++;        printf("Across\n");        for (count_row = 0; count_row < total_row; count_row++)            for (count_column = 0; count_column < total_column; count_column++)            {                if (puzzle[count_row][count_column] == '*')                    continue;                printf("%3d.", puzzle_num[count_row][count_column]);                while (puzzle[count_row][count_column] != '*')                    printf("%c", puzzle[count_row][count_column++]);                printf("\n");            }        printf("Down\n");        for (count_row = 0; count_row < total_row; count_row++)            for (count_column = 0; count_column < total_column; count_column++)            {                if (puzzle[count_row][count_column] == '*' || (count_row - 1 > -1 && puzzle[count_row - 1][count_column] != '*'))                    continue;                temp_row = count_row;                printf("%3d.", puzzle_num[count_row][count_column]);                while (puzzle[temp_row][count_column] != '*')                    printf("%c", puzzle[temp_row++][count_column]);                printf("\n");            }    }    return 0;}
0 0