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 配置设置
public function updateRegisterSetting(Request $request, Configuration $config) { $conf = $request-&g ...
- matlab提取wind底层数据库操作
首先需要安装navicat for SQL server 软件, 为了实现Matlab 通过JDBC方式连接Sqlserver数据库, 需要安装Sqlserver JDBC驱动. 地址: https: ...
- cf869C组合计数问题
如果在两个区域里连点,两个区域内选的点数一定要相等 即a中选出i个点,必须与b中选出i个点相连 连接种类数为 然后我们再来看,如果ab中有两点相连,其中一点再与c相连会出事吗? 很显然不会对答案产生 ...
- 微信如何获取unionid 并且打通微信公众号和小程序
准备 1.微信公众号 2.微信小程序 3.微信开发平台帐号 没有在开发平台绑定的小程序和公众号是没法获取unionid的 只需要在开发平台绑定小程序和公众号,便可以获取unionid 其中对于小程序和 ...
- ActiveSync之HTTP
Exchange ActiveSync:HTTP协议让客户端能够同步存储在服务器上的数据. 互联网工程工作小组(IETF)要求所有互联网协议都比支持UTF-8编码.因此,ActiveSync传输所使用 ...
- 饮冰三年-人工智能-linux-01通过VM虚拟机安装contes系统
先决条件:VM虚拟机的安装.contes系统的镜像文件 1:创建新的虚拟机 2:下一步,稍后安装操作系统 3:选择对应的系统 4:选择对应的路径 至此虚拟机已经创建完成(相当于买了一台新电脑) 5:编 ...
- 步步为营-84-数字转化为金额的Js+enter键取消页面刷新
说明:来不及细说了,老铁快上车 function fmoney(s, n) { console.log(s); n = n > && n <= ? n : ; s = pa ...
- pycharm安装mysql驱动包
新的环境配置pycharm的项目时,发现pycharm不能连接到mysql数据库.由于安了java环境但是还没配置相关的库,并且jetbrains家的IDE一般都是java写的,于是猜想可能是java ...
- Sublime Text 3 快捷键总结(拿走)
以下是个人总结不完全的快捷键总汇,祝愿各位顺利解放自己的鼠标. 选择类 Ctrl+D 选中光标所占的文本,继续操作则会选中下一个相同的文本. Alt+F3 选中文本按下快捷键,即可一次性选择全部的相同 ...
- 利用SVD-推荐未尝过的菜肴2
推荐未尝过的菜肴-基于SVD的评分估计 实际上数据集要比我们上一篇展示的myMat要稀疏的多. from numpy import linalg as la from numpy import * d ...