题意:输入m*n大小的字符串(里面有*,*为黑格,其他为白格),然后对它编号,编号规则为从左到右,从上往下,且左边或上面没有白格(可能是黑格或越界),如下图:

注意:

①除第一次输出答案外,其余每次输出前要加换行。

②down的输出需要按照编号的顺序输出,而不是真的按位置从上到下。

③判断结束是遇到*和访问越界,判断开始是看前一个是不是*(Cross和Down只是i,j减一的不同)和访问开始(i==0)

附上一个样例:它的cross和down分别是:

所以down的输出是从左往右,从上到下的寻找非*的位置,找到后从此位置往下输出,遇到越界和*则结束此次输出,

例如:找到A,输出A,然后找到I,输出IMPOSE,然后找到M,输出MEO。

所以判断结束是越界和*,而判断开始是*和i==0。

  1. #include "stdio.h"
  2. #include "stdlib.h"
  3. #include "string.h"
  4. int num[][];
  5. char str[][];
  6. int judge(int i,int j)
  7. {
  8. if(str[i][j]=='*')
  9. return -;
  10. if(i==||j==)//边界
  11. return ;
  12. if(str[i-][j]=='*'||str[i][j-]=='*')//左或上为*
  13. return ;
  14. return ;
  15. }
  16. int main()
  17. {
  18. int n,m,i,j,k,count=,countNum=,returnValue;
  19. int printfNum=;
  20. char c;
  21. while(scanf("%d",&m)&&m)
  22. {
  23. scanf("%d",&n);
  24. count++;
  25. // if(count!=1)
  26. // printf("\n");//这两句写在这里也可以
  27. printfNum=;
  28. countNum=;
  29. for(i=;i<m;i++)
  30. {
  31. c=getchar();//取换行符
  32. for(j=;j<n;j++)
  33. {
  34. scanf("%c",&str[i][j]);
  35. }
  36. }
  37.  
  38. //编号
  39. countNum++;
  40. memset(num,,sizeof(num));//初始化为0
  41. for(i=;i<m;i++)
  42. {
  43. for(j=;j<n;j++)
  44. {
  45. //判断,>0->非*,-1->*,0->在边界
  46. returnValue=judge(i,j);
  47. if(returnValue==)
  48. {
  49. num[i][j]=countNum;
  50. countNum++;
  51. }
  52. else{
  53. if(returnValue==-)
  54. num[i][j]=-;
  55. }
  56. }
  57. }
  58. // printf("num:\n");
  59. // for(i=0;i<m;i++)
  60. // {
  61. // for(j=0;j<n;j++)
  62. // printf("%-3d",num[i][j]);
  63. // printf("\n");
  64. // }
  65. //输出结果
  66. if(count!=)
  67. printf("\n");
  68. printf("puzzle #%d:\n",count);
  69. printf("Across\n");
  70. for(i=;i<m;i++)
  71. {
  72. for(j=;j<n;j++)
  73. {
  74. if((j==||num[i][j-]==-)&&num[i][j]>)
  75. {
  76. printf("%3d.",num[i][j]);
  77. for(k=j;k<n;k++)
  78. {
  79. printf("%c",str[i][k]);//如果和下面的if交换就无法判断边界了
  80. if(num[i][k+]==-||k==n-)
  81. {
  82. printf("\n");
  83. break;
  84. }
  85. }
  86. }
  87. }
  88. }
  89. // for(i=0;i<m;i++)//这种写法WA
  90. // {
  91. // for(j=0;j<n;j++)
  92. // {
  93. // if(printfNum==1&&num[i][j]>0)
  94. // {
  95. // if(num[i][j]!=1)
  96. // printf("\n");
  97. // printf("%3d.",num[i][j]);
  98. // printfNum=-printfNum;
  99. // }
  100. // if(str[i][j]!='*')
  101. // {
  102. // printf("%c",str[i][j]);
  103. // }
  104. // else
  105. // {
  106. // printfNum=1;
  107. // }
  108. // }
  109. // printfNum=1;
  110. // }
  111. printf("\n");
  112. printfNum=;
  113. printf("Down\n");
  114. for(i=;i<m;i++)
  115. {
  116. for(j=;j<n;j++)
  117. {
  118. if((i==||num[i-][j]==-)&&num[i][j]>=)
  119. {
  120. printf("%3d.",num[i][j]);
  121. for(k=i;k<m;k++)
  122. {
  123. printf("%c",str[k][j]);
  124. if(num[k+][j]==-||k==m-)
  125. {
  126. printf("\n");
  127. break;
  128. }
  129. }
  130. }
  131. }
  132. }
  133.  
  134. }
  135. return ;
  136. }

  

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. BeautifulSoup的基本操作

    >>> from bs4 import BeautifulSoup   #导入 >>> soup = BeautifulSoup(url.content," ...

  2. 【linux】ftp使用端口转发问题

    相关资料: 1.[ssh]端口转发 2.[ftp]主动模式和被动模式 先说结论:用端口转发无法解决ftp客户端与服务器的连接问题,原因是ftp的data端口不固定,不能把所有>1024的端口都做 ...

  3. swoole 简介

  4. 小学生都看得懂的C语言入门(4): 数组与函数

    // 之前判断素数, 只需要到sqrt(x)即可,//更加简单的, 判断能够比已知的小于x的素数整除, 运行更快 #include <stdio.h> // 之前判断素数, 只需要到sqr ...

  5. RESTful架构解读

    什么是REST REST与技术无关,代表的是一种软件架构风格.REST全称是Representational State Tranfer, 表征性状态转移. REST从资源的角度类审视整个网络,它将分 ...

  6. python调用PHP方法

    PHP代码如下:<?php $method = $argv[1]; $param1 = $argv[2]; $param2 = $argv[3]; if(isset($method) & ...

  7. NPOI操作Excel(三)--解析Excel

    通过前面两篇的基础学习,我们对NPOI有了一定了了解,下面就开始进入实战,解析下面格式的Excel(下面只是列举了几个例子),并保存入库 首先我们先分析一下,要解析这样的Excel,需要把指标[橘色背 ...

  8. Python函数之内置函数

    截止导Python 3.6 目前内置函数有68个 以下是对这些内置函数的分类 一:作用域相关 以字典的形式返回作用域中的名字 locals # 返回本地作用域的所有名字 globals # 返回全局作 ...

  9. 插件使用一顶部消息提示---overhang

    overhang 是一个非常好的消息提示插件,它是在顶部提示. 官方网站:https://github.com/paulkr/overhang.js 使用方法 1.引入jquery库和jqeury u ...

  10. 让simplejson支持datetime类型的序列化

    simplejson是Python的一个json包,但是觉得有点不爽,就是不能序列化datetime,稍作修改就可以了: 原文:http://blog.csdn.net/hong201/article ...