展厅设计素材网站,网站设计相似侵权吗,简单网站开发项目实例,手机优化专家下载纵横字谜的答案 Crossword Answers - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 翻译后大概是#xff1a;
有一个 r 行 c 列 (1r,c10) 的网格#xff0c;黑格为 * #xff0c;每个白格都填有一个字母。如果一个白格的左边相邻位置或者上边相邻位置没有白格… 纵横字谜的答案 Crossword Answers - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 翻译后大概是
有一个 r 行 c 列 (1r,c10) 的网格黑格为 * 每个白格都填有一个字母。如果一个白格的左边相邻位置或者上边相邻位置没有白格可能是黑格也可能出了网格边界则称这个白格是一个起始格。
你的任务是先找出网格中所有横向单词Across。这些单词必须从一个起始格左边是黑格或是第一列开始向右延伸到一个黑格的左边或者整个网格的最右列。然后找出所有竖向单词Down规则同上这些单词必须从一个起始格上边是黑格或是第一行开始向下延伸到一个黑格的上边或者整个网格的最下行。 基本实现思路没有按照题目的规定输入输出只是一个基本思路
#include stdio.h
#define MAX 100int main()
{int lon, wid;scanf(%d %d, wid, lon);getchar();//吸收掉换行符char s[MAX][MAX];for (int i 0; i wid; i){gets_s(s[i], lon 1);}printf(\nAcross:);for (int i 0; i wid; i)//横向{for (int j 0; j lon; j){if (s[i][j] *);else{if (s[i][j - 1] *)printf(\n%c, s[i][j]);else{printf(%c, s[i][j]);}}}if (s[i 1][0] *);elseprintf(\n);}printf(\nDown:);for (int i 0; i lon; i)//纵向{for (int j 0; j wid; j){if (s[j][i] *);else{if (s[j -1][i] *)printf(\n%c, s[j][i]);else{printf(%c, s[j][i]);}}}if (s[0][i 1] *);elseprintf(\n);}return 0;
}
难点在于处理换行问题上面代码对换行的思路是
1.判断字母前面是不是*如果是就进行换行
2.到下一行时换行
3.结合1与2的特殊情况换行后下一行第一个为*如果不加判断会进行两次换行所以加判断进行一次换行最后一个是*然后下一行这种情况不用考虑因为由于1是判断字母前面是不是*才决定换行的所以最后一个都是*了就不存在这一行还有一个字母了
4.列与行的思路一样只是换个反向而已。