UVa232纵横字谜的答案
//纵横字谜的答案
#include <stdio.h>
#include <ctype.h>
int main (){int r,c;int count = 0; while(1){scanf("%d",&r);if(r==0) break;scanf("%d",&c);char str[r+1][c+1];for(int i=0;i<=r;i++){gets(str[i]);}//读入网格//for(int i=1;i<=r;i++){// for(int j=0;j<c;j++){// printf("%c ",str[i][j]);//}printf("\n");//}//测试读入 //i=1,j=0为起始 //首先编号int num = 1;int numbers[r+1][c+1]={0};for(int i=1;i<=r;i++){for(int j=0;j<c;j++){if(str[i][j]!='*'){if(i==1||j==0||str[i-1][j]=='*'||str[i][j-1]=='*'){numbers[i][j]=num++;} }}}//编号//test输出编好号后的序列//for(int i=1;i<=r;i++){// for(int j=0;j<c;j++){// printf("%d ",numbers[i][j]);// }printf("\n");//} printf("puzzle #%d\n",++count);printf("Across\n");int flag = 1;for(int i=1;i<=r;i++){flag = 1; for(int j=0;j<c;j++){if(flag&&numbers[i][j]!=0)printf("%d.",numbers[i][j]);if(str[i][j]!='*'){flag = 0;printf("%c",str[i][j]);}else if(str[i][j]=='*'){flag = 1;if(isalpha(str[i][j-1])&&isalpha(str[i][j+1]))printf("\n");//当星号的前面或后面是白格时 //在同一行中遇到星号时 }}printf("\n");}printf("Down\n");flag = 1;for(int j=0;j<c;j++){flag = 1; for(int i=1;i<=r;i++){if(flag&&numbers[i][j]!=0) printf("%d.",numbers[i][j]);if(str[i][j]!='*'){flag = 0;printf("%c",str[i][j]); }else if(str[i][j]=='*'){//在同一列中遇到星号时 flag = 1;//同一列中连续出现多个星号if(isalpha(str[i-1][j])&&isalpha(str[i+1][j])){printf("\n");//当星号的上面或者下面是白格时 } }}printf("\n");}}return 0;
}
有几个值得学习的地方是编号,二维字符数组的读入,测试读入的情况便于后续的处理,然后是在一行或一列中间出现的星号的判断,最开始自己的思路是错的就只考虑了星号和省去一行前面的星号,但是不行,因为连续星号的判断好像有点复杂,不如直接判断一行中间的星号,这个判断是为了输出时回车符的输出更加精确
UVa232纵横字谜的答案相关推荐
- UVA232 纵横字谜的答案 Crossword Answers 题解
题意翻译 输入一个r 行c 列(1<r,.c<10) 的网格,黑格用"*"每个白格都填有一个字母.如果一个白格的左边相邻位置或者上边相邻位置没有白格(可能是黑格,也可能 ...
- 习题3-6 纵横字谜的答案 UVa232
算法竞赛入门经典(第2版)第3章 数组和字符串 习题3-6 纵横字谜的答案 UVa232 感悟. 1.决定自此,每做一道,必从网站下载该道的PDF文件,废弃从别处下载的PDF文件,因其错误太多. 2. ...
- 纵横字谜的答案(Uva232)
纵横字谜的答案(Uva232) 题目UVa232,题目考察点时二维数组的使用.注意点是需要读懂题目意思,关键点是起始格需要用额外用一个数组存储.然后根据横向和纵向单词的定义,结合起始格,循环遍历打印输 ...
- 纵横字谜的答案 (UVa232)
纵横字谜的答案 Time Limit:3000MS Memory Limit:0KB 64bit IO Format:%lld & %llu Submit Status De ...
- 《算法竞赛入门经典》(第2版) 习题3-6 纵横字谜的答案
题目 习题3-6 纵横字谜的答案(Cross Answers,ACM/ICPC World Final 1994, UVa232)ps: Final???!!!难道是1994年世界总决赛的第一题-哈哈 ...
- 习题3-6 纵横字谜的答案(Crossword Answers, ACM/ICPC World Finals 1994, UVa232)
原题vjudge 输入一个r行c列(1≤r,c≤10)的网格,黑格用"*"表示,每个白格都填有一个字母. 如 果一个白格的左边相邻位置或者上边相邻位置没有白格(可能是黑格,也可能出 ...
- UVa232 Crossword Answers(纵横字谜的答案)
题意: 输入一个r行c列的网格,*表示黑格,字母表示白格.若一个白格位于边界或上方是黑格或左方是黑格,则称其为起始格.找出所有横向单词和竖向单词,其必须从一个起始格开始,到黑格或网格边界为止. 思路: ...
- 纵横字谜的答案(Crossword Answers UVa232)
做到这个题目的时候发现和前面的那个题目非常的像,都是字符都是表格.依然是用一个二维字符数组,储存表格的状况,然后进行搜索判断. 先写一下我犯的错误吧,读者看到我犯过的错误之后说不定就找到自己的方法了呢 ...
- 习题 3-6 纵横字谜的答案
这道题网上有的答案是毒瘤啊,自己都写错了还发出来,题目虽然是英文的,但是也不至于题目都搞错了吧,害自己以为错了,debug半个多小时,╮(╯▽╰)╭ 题目 输入一个r行c列(1≤r,c≤10)的网格, ...
最新文章
- linux esd转iso,window_Win10 TH2正式版10586官方ESD映像怎么转换成ISO镜像?,今天phpstudy分享了Win10 TH2(Build - phpStudy...
- 批量插入/修改网页代码的asp脚本
- mysql explain字段含义,MySQL(十七):EXPLAIN 输出信息之 Extra 字段解释
- 微信开发系列之一 - 微信公众号开发的开发环境搭建
- Android之日期时间选择器使用方法
- 内存分区与栈帧使用分析
- JavaScript JSON数据格式
- numpy中array的维度之-------一维向量和一维数组的区别。
- 使用JS读取本地文件
- Java面试宝典4.0版
- 怎样用计算机算出别人的出生日期,Excel根据出生日期计算年龄的步骤
- K8S重启后coredns pod无法正常运行
- 收集的13个杀毒软件和安全防护软件(有图哦)
- 应用虚拟化软件-VA虚拟应用管理平台
- Stata-交乘项专题: 主效应项可以忽略吗?
- 基础入门-算法逆向散列对称非对称JS源码逆向AESDESRSASHA
- Project2016创建复合视图
- UVa 12325 - Zombie's Treasure Chest(暴力枚举+预处理)
- mysql group by month_sql - MySQL查询GROUP BY日/月
- 微信小程序开发源码集合平台系统 完整前后端+安装教程
热门文章
- 永宏plc的ip通信转接模块,能ping通了,却无法建立modbus tcp连接的问题解决
- win32 CreateDialog和DialogBox
- linux could not open input file:,PHP命令行提示“Could not open input file”解决方法
- NCspeed软件+视频教程
- 对口单招计算机电工试题答案,2015年对口单招机电专业电工技能试题一
- 中国(EV)电动汽车的“影子”(上)
- 别光顾着学技术,也要抬头看看路
- abb机器人易耗品_ABB机器人中文手册
- Ehcache(缓存)
- 二叉树的遍历-Recursive/Iterative/Morris