UVa-232-纵横字谜的答案
这一题的话,输出的时候,我们要按照3位输出,不能按照两位,因为是10*10的网格,所以就是100位,不管有没有100的起始格,它都是按照3位进行输出的,从题上的输出可以看到,不然的话,就会PE。
然后我们对于它的起始网格的处理,我们可以设置一个对应的网格,然后判断填数就可以了,然后我们判断的时候肯定要否定*号,所以就在判断语句之内加上num [i] [j] =-1的赋值就可以了。然后我们再对于它是否是起始格进行赋值,因为如果是-1的话, 我们也是要输出这个字母的,对于是零的格子,我们就不再进行输出了。
此外加上一个vis数组,来判断是否输出过就行了,对于总想输出来说的话,题目中实际上还是按照起始格的顺序进行的,所以我们纵向输出的时候还是按照从上往下横着扫,但是每扫到一个起始格,我们就纵向进行判断输出。
以及纵向输出之前,vis清零还是十分关键的。
#include <stdio.h>
#include <string.h>
int num[11][11];
char puzz[11][11];
int vis[11][11];
int main()
{
int r,c;
int cnt,ord=1;
while (scanf("%d",&r)!=EOF&&r!=0) {
scanf("%d",&c);
cnt=1;
memset(num,0,sizeof(num));
memset(vis,0,sizeof(vis));
for (int i=0;i<r;i++)
scanf("%s",puzz[i]);
for (int i=0;i<r;i++) {
for (int j=0;j<c;j++) {
if (puzz[i][j]!='*') {
num[i][j]=-1;//表明它是字母
if (i==0||j==0) {
num[i][j]=cnt++;
continue;
}
if (puzz[i-1][j]=='*'||puzz[i][j-1]=='*')
num[i][j]=cnt++;
}
}
}
if (ord!=1) printf("\n");
printf("puzzle #%d:\nAcross\n",ord++);
for (int i=0;i<r;i++) {
for (int j=0;j<c;j++) {
if (num[i][j]>0&&!vis[i][j]) {
vis[i][j]=1;
printf("%3d.",num[i][j]);
int k=j;
while (num[i][k]!=0) {
printf("%c",puzz[i][k]);
vis[i][k]=1;
k++;
}
printf("\n");
}
}
}
memset(vis,0,sizeof(vis));
printf("Down\n");
for (int i=0;i<r;i++) {
for (int j=0;j<c;j++) {
if (num[i][j]>0&&!vis[i][j]) {
vis[i][j]=1;
printf("%3d.",num[i][j]);
int k=i;
while (num[k][j]!=0) {
printf("%c",puzz[k][j]);
vis[k][j]=1;
k++;
}
printf("\n");
}
}
}
}
return 0;
}
// for (int i=0;i<r;i++) {
// for (int j=0;j<c;j++) {
// printf("%3d",num[i][j]);
// }
// printf("\n");
// }
UVa-232-纵横字谜的答案的更多相关文章
- UVa 714 Copying Books - 二分答案
求使最大值最小,可以想到二分答案. 然后再根据题目意思乱搞一下,按要求输出斜杠(这道题觉得就这一个地方难). Code /** * UVa * Problem#12627 * Accepted * T ...
- Uva 232 一个换行WA 了四次
由于UVA OJ上没有Wrong anwser,搞的多花了好长时间去测试程序,之前一直以为改OJ有WA,后来网上一搜才知道没有WA,哎哎浪费了好长时间.此博客用来记录自己的粗心大意. 链接地址:htt ...
- UVA 232 Corssword Answer
题意:输入m*n大小的字符串(里面有*,*为黑格,其他为白格),然后对它编号,编号规则为从左到右,从上往下,且左边或上面没有白格(可能是黑格或越界),如下图: 注意: ①除第一次输出答案外,其余每次输 ...
- UVA 12097 Pie(二分答案)
题目链接: 这道题虽然不是一道典型的二分答案题,但同样也可以用二分答案来做. 来二分面积为$area$的派,然后看看条件是否矛盾. 与其矛盾的便是$f+1$个人是否每个人都会有. 一个半径为$r$的派 ...
- UVA 12124 Assemble(二分答案)
题目链接:https://vjudge.net/problem/UVA-12124 垃圾vjudge毁我青春!! 首先这道题是解决“最小值最大”的问题,所以要二分答案. 在这里我们二分$quality ...
- UVa 232 Crossword Answers
Crossword Answers A crossword puzzle consists of a rectangular grid of black and white squares and ...
- Crossword Answers UVA - 232
题目大意 感觉挺水的一道题.找出左面右面不存在或者是黑色的格子的白各,然后编号输出一横向单词和竖向单词(具体看原题) 解析 ①找出各个格子的编号 ②对每个节点搜索一下 ③输出的时候注意最后一个数据后面 ...
- 【习题 3-6 UVA - 232】Crossword Answers
[链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 模拟题.注意场宽为3 [代码] #include <bits/stdc++.h> using namespace std ...
- 码书:编码与解码的战争 PDF 下载
码书:编码与解码的战争 PDF 下载 下载地址:https://pan.baidu.com/s/14Y_krHh-unOv4g2KYFFDgQ 如需分享码:[打开微信]->[扫描右侧二维码]-& ...
随机推荐
- Mysql 到 Hbase 数据如何实时同步,强大的 Streamsets 告诉你
很多情况大数据集群需要获取业务数据,用于分析.通常有两种方式: 业务直接或间接写入的方式 业务的关系型数据库同步到大数据集群的方式 第一种可以是在业务中编写代码,将觉得需要发送的数据发送到消息队列,最 ...
- Mysql | 总结 | 常用的查询语句(单表查询)
1. 查询单表全部 select* from 数据表名; 2. 查询单表中一个或者多个字段 select 字段1,字段2 from 数据表名; 3. 查询单表中的指定信息 select* from 数 ...
- UVa12298(生成函数的简单应用+FFT)
I have a set of super poker cards, consisting of an infinite number of cards. For each positive compo ...
- Codeforces Round #396 (Div. 2) C
Mahmoud wrote a message s of length n. He wants to send it as a birthday present to his friend Moaz ...
- 17 文件和网络I/O
1 文件和网络I/O 1.1 文件处理 groovy向java所提供的File 类,新增了几个方便的方法.分别是:eachLine和.text. package file class F ...
- oracle tps
http://blog.csdn.net/nilxin/article/details/5812480 sample 1: 定义 TPS:Transactions Per Second(每秒传输的事物 ...
- 转 OUI and OPatch Do Not Recognize JDK/JRE on Windows
issue 1: 新覆盖的opatch 提示,无法opatch 报错 此时不应有1.6 D:\app\Administrator\product\11.2.0\dbhome_1\OPatch\ocm\ ...
- Spark Mllib里如何删除每一条数据中所有的双引号“”(图文详解)
不多说,直接上干货! 具体,见 Hadoop+Spark大数据巨量分析与机器学习整合开发实战的第13章 使用决策树二元分类算法来预测分类StumbleUpon数据集
- hdu3487Play with Chain(splay)
链接 简单的两种操作,一种删除某段区间,加在第I个点的后面,另一个是翻转区间.都是splay的简单操作. 悲剧一:pushdown时候忘记让lz=0 悲剧二:删除区间,加在某点之后的时候忘记修改其父亲 ...
- 【js】数组去重时间复杂度为n的方法
# 时间复杂度O(n^2) function fn(arr) { return arr.filter((item, index, arr) => arr.indexOf(item) === in ...