题意:输入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的更多相关文章

  1. Uva 232 一个换行WA 了四次

    由于UVA OJ上没有Wrong anwser,搞的多花了好长时间去测试程序,之前一直以为改OJ有WA,后来网上一搜才知道没有WA,哎哎浪费了好长时间.此博客用来记录自己的粗心大意. 链接地址:htt ...

  2. UVa 232 Crossword Answers

     Crossword Answers  A crossword puzzle consists of a rectangular grid of black and white squares and ...

  3. Crossword Answers UVA - 232

    题目大意 感觉挺水的一道题.找出左面右面不存在或者是黑色的格子的白各,然后编号输出一横向单词和竖向单词(具体看原题) 解析 ①找出各个格子的编号 ②对每个节点搜索一下 ③输出的时候注意最后一个数据后面 ...

  4. 【习题 3-6 UVA - 232】Crossword Answers

    [链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 模拟题.注意场宽为3 [代码] #include <bits/stdc++.h> using namespace std ...

  5. UVa 714 Copying Books(二分)

    题目链接: 传送门 Copying Books Time Limit: 3000MS     Memory Limit: 32768 KB Description Before the inventi ...

  6. UVa 12505 Searching in sqrt(n)

    传送门 一开始在vjudge上看到这题时,标的来源是CSU 1120,第八届湖南省赛D题“平方根大搜索”.今天交题时CSU突然跪了,后来查了一下看哪家OJ还挂了这道题,竟然发现这题是出自UVA的,而且 ...

  7. 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, ...

  8. UVA 1252 十五 Twenty Questions

    十五 Twenty Questions Time Limit:3000MS     Memory Limit:0KB     64bit IO Format:%lld & %llu Submi ...

  9. UVa 1640 (计数) The Counting Problem

    题意: 统计[a, b]或[b, a]中0~9这些数字各出现多少次. 分析: 这道题可以和UVa 11361比较来看. 同样是利用这样一个“模板”,进行区间的分块,加速运算. 因为这里没有前导0,所以 ...

随机推荐

  1. laravel 获取当前月,当前星期,当天起始时间方法

    获取当前月起始时间: 1. $time=time(); $start=date('Y-m-01',$time);//获取指定月份的第一天 $end=date('Y-m-t',$time); //获取指 ...

  2. jQuery File Upload的使用

    jQuery File Upload 是一个Jquery文件上传组件,支持多文件上传.取消.删除,上传前缩略图预览.列表显示图片大小,支持上传进度条显示等,以下就介绍一下该插件的简单使用 1.需要加载 ...

  3. jmeter csv中获取带引号的数据详情

    最近在工作中,对jmeter实践的点滴的记录这里分享,不一定正确,仅供参考和讨论,有想法的欢迎留言.谈论. 1技巧1:从csv中获取带引号的数据详情 背景:我们从csv中获取数据,在jmeter中使用 ...

  4. php安装扩展

    php安装扩展 以前以为php的扩展要重新编译php,今天在群友的指点下知道可以像apache模块一样动态扩展,以mcrypt举例. 进入要安装的扩展的源码目录cd /root/php-5.2.6/e ...

  5. MongoDB 入门

    1 MongoDb 简介 MongoDB是为互联网而生的数据库,是文档数据库. 1.1 优点: Schema-less,不需要预先定义表结构,同一个"表"中可以保存多个格式的数据: ...

  6. DevExpress中的GridControl控件设置了列Readonly后,想双击弹出明细的实现

    OptionsBehavior.Editable = true时,会有二个对象触发事件:view触发ShownEditor 事件(第一单击时)和内置编辑器的DoubleClick事件所以必须处理这二个 ...

  7. SqlBulkCopy批量插入数据神器

    1.简单例子 class Program { static void Main(string[] args) { Stopwatch sw = new Stopwatch(); DataTable d ...

  8. Linux查找当前目录5天的文件并打包

    find . -name "*.sh" -mtime -5 |xargs tar zcvf /tmp/log.tar.gz 解释: *.sh是查找以.sh结尾的文件,也可以是其他如 ...

  9. Pytorch学习笔记

    非线性回归问题的参数求解,反向求导基本流程.Variable 计算时, 它在后台一步步默默地搭建着一个庞大的系统, 叫做计算图, computational graph. 这个图将所有的计算步骤 (节 ...

  10. 【Android】修改Android 模拟器IMSI

    修改Android 模拟器IMEI 在.....\android_sdk\tools文件下找到emulator-arm.exe,使用UltraEdit文本编辑器打开,搜索CIMI关键字,把310260 ...