UVA 232 Corssword Answer
题意:输入m*n大小的字符串(里面有*,*为黑格,其他为白格),然后对它编号,编号规则为从左到右,从上往下,且左边或上面没有白格(可能是黑格或越界),如下图:
注意:
①除第一次输出答案外,其余每次输出前要加换行。
②down的输出需要按照编号的顺序输出,而不是真的按位置从上到下。
③判断结束是遇到*和访问越界,判断开始是看前一个是不是*(Cross和Down只是i,j减一的不同)和访问开始(i==0)
附上一个样例:
它的cross和down分别是:
和
。
所以down的输出是从左往右,从上到下的寻找非*的位置,找到后从此位置往下输出,遇到越界和*则结束此次输出,
例如:找到A,输出A,然后找到I,输出IMPOSE,然后找到M,输出MEO。
所以判断结束是越界和*,而判断开始是*和i==0。
#include "stdio.h"
#include "stdlib.h"
#include "string.h"
int num[][];
char str[][];
int judge(int i,int j)
{
if(str[i][j]=='*')
return -;
if(i==||j==)//边界
return ;
if(str[i-][j]=='*'||str[i][j-]=='*')//左或上为*
return ;
return ;
}
int main()
{
int n,m,i,j,k,count=,countNum=,returnValue;
int printfNum=;
char c;
while(scanf("%d",&m)&&m)
{
scanf("%d",&n);
count++;
// if(count!=1)
// printf("\n");//这两句写在这里也可以
printfNum=;
countNum=;
for(i=;i<m;i++)
{
c=getchar();//取换行符
for(j=;j<n;j++)
{
scanf("%c",&str[i][j]);
}
} //编号
countNum++;
memset(num,,sizeof(num));//初始化为0
for(i=;i<m;i++)
{
for(j=;j<n;j++)
{
//判断,>0->非*,-1->*,0->在边界
returnValue=judge(i,j);
if(returnValue==)
{
num[i][j]=countNum;
countNum++;
}
else{
if(returnValue==-)
num[i][j]=-;
}
}
}
// printf("num:\n");
// for(i=0;i<m;i++)
// {
// for(j=0;j<n;j++)
// printf("%-3d",num[i][j]);
// printf("\n");
// }
//输出结果
if(count!=)
printf("\n");
printf("puzzle #%d:\n",count);
printf("Across\n");
for(i=;i<m;i++)
{
for(j=;j<n;j++)
{
if((j==||num[i][j-]==-)&&num[i][j]>)
{
printf("%3d.",num[i][j]);
for(k=j;k<n;k++)
{
printf("%c",str[i][k]);//如果和下面的if交换就无法判断边界了
if(num[i][k+]==-||k==n-)
{
printf("\n");
break;
}
}
}
}
}
// for(i=0;i<m;i++)//这种写法WA
// {
// for(j=0;j<n;j++)
// {
// if(printfNum==1&&num[i][j]>0)
// {
// if(num[i][j]!=1)
// printf("\n");
// printf("%3d.",num[i][j]);
// printfNum=-printfNum;
// }
// if(str[i][j]!='*')
// {
// printf("%c",str[i][j]);
// }
// else
// {
// printfNum=1;
// }
// }
// printfNum=1;
// }
printf("\n");
printfNum=;
printf("Down\n");
for(i=;i<m;i++)
{
for(j=;j<n;j++)
{
if((i==||num[i-][j]==-)&&num[i][j]>=)
{
printf("%3d.",num[i][j]);
for(k=i;k<m;k++)
{
printf("%c",str[k][j]);
if(num[k+][j]==-||k==m-)
{
printf("\n");
break;
}
}
}
}
} }
return ;
}
UVA 232 Corssword Answer的更多相关文章
- Uva 232 一个换行WA 了四次
由于UVA OJ上没有Wrong anwser,搞的多花了好长时间去测试程序,之前一直以为改OJ有WA,后来网上一搜才知道没有WA,哎哎浪费了好长时间.此博客用来记录自己的粗心大意. 链接地址:htt ...
- 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 ...
- UVa 714 Copying Books(二分)
题目链接: 传送门 Copying Books Time Limit: 3000MS Memory Limit: 32768 KB Description Before the inventi ...
- UVa 12505 Searching in sqrt(n)
传送门 一开始在vjudge上看到这题时,标的来源是CSU 1120,第八届湖南省赛D题“平方根大搜索”.今天交题时CSU突然跪了,后来查了一下看哪家OJ还挂了这道题,竟然发现这题是出自UVA的,而且 ...
- UVa 11991:Easy Problem from Rujia Liu?(STL练习,map+vector)
Easy Problem from Rujia Liu? Though Rujia Liu usually sets hard problems for contests (for example, ...
- UVA 1252 十五 Twenty Questions
十五 Twenty Questions Time Limit:3000MS Memory Limit:0KB 64bit IO Format:%lld & %llu Submi ...
- UVa 1640 (计数) The Counting Problem
题意: 统计[a, b]或[b, a]中0~9这些数字各出现多少次. 分析: 这道题可以和UVa 11361比较来看. 同样是利用这样一个“模板”,进行区间的分块,加速运算. 因为这里没有前导0,所以 ...
随机推荐
- laravel 获取当前月,当前星期,当天起始时间方法
获取当前月起始时间: 1. $time=time(); $start=date('Y-m-01',$time);//获取指定月份的第一天 $end=date('Y-m-t',$time); //获取指 ...
- jQuery File Upload的使用
jQuery File Upload 是一个Jquery文件上传组件,支持多文件上传.取消.删除,上传前缩略图预览.列表显示图片大小,支持上传进度条显示等,以下就介绍一下该插件的简单使用 1.需要加载 ...
- jmeter csv中获取带引号的数据详情
最近在工作中,对jmeter实践的点滴的记录这里分享,不一定正确,仅供参考和讨论,有想法的欢迎留言.谈论. 1技巧1:从csv中获取带引号的数据详情 背景:我们从csv中获取数据,在jmeter中使用 ...
- php安装扩展
php安装扩展 以前以为php的扩展要重新编译php,今天在群友的指点下知道可以像apache模块一样动态扩展,以mcrypt举例. 进入要安装的扩展的源码目录cd /root/php-5.2.6/e ...
- MongoDB 入门
1 MongoDb 简介 MongoDB是为互联网而生的数据库,是文档数据库. 1.1 优点: Schema-less,不需要预先定义表结构,同一个"表"中可以保存多个格式的数据: ...
- DevExpress中的GridControl控件设置了列Readonly后,想双击弹出明细的实现
OptionsBehavior.Editable = true时,会有二个对象触发事件:view触发ShownEditor 事件(第一单击时)和内置编辑器的DoubleClick事件所以必须处理这二个 ...
- SqlBulkCopy批量插入数据神器
1.简单例子 class Program { static void Main(string[] args) { Stopwatch sw = new Stopwatch(); DataTable d ...
- Linux查找当前目录5天的文件并打包
find . -name "*.sh" -mtime -5 |xargs tar zcvf /tmp/log.tar.gz 解释: *.sh是查找以.sh结尾的文件,也可以是其他如 ...
- Pytorch学习笔记
非线性回归问题的参数求解,反向求导基本流程.Variable 计算时, 它在后台一步步默默地搭建着一个庞大的系统, 叫做计算图, computational graph. 这个图将所有的计算步骤 (节 ...
- 【Android】修改Android 模拟器IMSI
修改Android 模拟器IMEI 在.....\android_sdk\tools文件下找到emulator-arm.exe,使用UltraEdit文本编辑器打开,搜索CIMI关键字,把310260 ...