紫书第三章训练1 D - Crossword Answers
A crossword puzzle consists of a rectangular grid of black and white squares and two lists of definitions (or descriptions).
One list of definitions is for ``words" to be written left to right across white squares in the rows and theother list is for words to be written down white squares in the columns. (A word is a sequence of alphabetic characters.)
To solve a crossword puzzle, one writes the words corresponding to the definitions on the white squares of the grid.
The definitions correspond to the rectangular grid by means of sequential integers on eligible" white squares. White squares with black squaresimmediately to the left or above them are
eligible." White squares with nosquares either immediately to the left or above are also ``eligible." No othersquares are numbered. All of the squares on the first row are numbered.
The numbering starts with 1 and continues consecutively across white squares of the first row, then across the eligible white squares of the second row, then across the eligible white squares of the third row and so on across all of the rest of the rows of the puzzle. The picture below illustrates a rectangular crossword puzzle grid with appropriate numbering.
An across" word for a definition is written on a sequence of white squares ina row starting on a numbered square that does not follow another white square in the same row. The sequence of white squares for that word goes across the row of the numbered square, ending immediately before the next black square in the row or in the rightmost square of the row. A
down" word for a definition is written on a sequence of white squares in acolumn starting on a numbered square that does not follow another white square in the same column.
The sequence of white squares for that word goes down the column of the numbered square, ending immediately before the next black square in the column or in the bottom square of the column.
Every white square in a correctly solved puzzle contains a letter.
You must write a program that takes several solved crossword puzzles as input and outputs the lists of across and down words which constitute the solutions.
Input
Each puzzle solution in the input starts with a line containing two integers rand c ( and ), where r (the first number) is the number ofrows in the puzzle and c (the second number) is the number of columns.
The rrows of input which follow each contain c characters (excluding the end-of-line) which describe the solution. Each of those c characters is an alphabeticcharacter which is part of a word or the character *", which indicates ablack square. The end of input is indicated by a line consisting of the single number 0. Output Output for each puzzle consists of an identifier for the puzzle (puzzle #1:,puzzle #2:, etc.) and the list of across words followed by the list of downwords. Words in each list must be output one-per-line in increasing order of the number of their corresponding definitions. The heading for the list of across words is
Across". The heading for the list of down words is ``Down".
In the case where the lists are empty (all squares in the grid are black), the Across and Down headings should still appear.
Separate output for successive input puzzlesby a blank line.
Sample Input
2 2
AT
O
6 7
AIMDEN
MEONE
UPONTO
SOERIN
SAOR*
IES*DEA
0
Sample Output
puzzle #1:
Across
1.AT
3.O
Down
1.A
2.TO
puzzle #2:
Across
1.AIM
4.DEN
7.ME
8.ONE
9.UPON
11.TO
12.SO
13.ERIN
15.SA
17.OR
18.IES
19.DEA
Down
1.A
2.IMPOSE
3.MEO
4.DO
5.ENTIRE
6.NEON
9.US
10.NE
14.ROD
16.AS
18.I
20.A
这个不是我们杂志后面的填字游戏,这个东西据说是从英国传过来的。意思根据题一看都懂,而且输出大家也都会,只是个循环控制。关键就是其编号,这个编号我想的挺久的,当时还是蛮蒙逼的。找规律,呸,就是看图,你编号的都是有字母的,然后就是按照先行后列的顺序,什么时候需要编号呢,就是在单词开始的地方啊,什么时候开始,首先左上边界上的可能会越界,你可以特判,这只要是是字母一定是要排序的,往右往下走,这个顺序上你到了下一状态是要考虑它上面和它左边,只有不是字母才有序,因为是开始啊。综上,开始只能是左上边界,和左面上面都是*的,接下来就很简单了
AC代码
#include <stdio.h>
int main()
{char s[15][15];
int m,n,cas=0;
while(scanf("%d",&m),m){
if(cas)printf("\n");
int a[15][15]={0};
scanf("%d",&n);
for(int i=1;i<=m;i++)
scanf("%s",s[i]);
int f=1;
for(int i=1;i<=m;i++){
for(int j=0;j<n;j++){
if(s[i][j]!= '*'){
if(i==1||j==0)
a[i][j]=f++;
else{
if(s[i-1][j]=='*'||s[i][j-1]== '*')
a[i][j]=f++;}}}}
printf("puzzle #%d:\nAcross\n",++cas);
for(int i=1;i<=m;i++){
for(int j=0;j<n;j++)
if(a[i][j]){
printf("%3d.",a[i][j]);
for(;j<n;j++)
if(s[i][j]=='*')
break;
else
printf("%c",s[i][j]);
printf("\n");
}}
printf("Down\n");
for(int i=1;i<=m;i++){
for(int j=0;j<n;j++)
if(a[i][j]&&(i==1||s[i-1][j]=='*')){
printf("%3d.",a[i][j]);
for(f=i;f<=m;f++)
if(s[f][j]=='*')
break;
else
printf("%c",s[f][j]);
printf("\n");
}}
}
return 0;
}
紫书第三章训练1 D - Crossword Answers的更多相关文章
- 紫书第三章训练1 E - DNA Consensus String
DNA (Deoxyribonucleic Acid) is the molecule which contains the genetic instructions. It consists of ...
- 紫书第五章训练3 D - Throwing cards away I
D - Throwing cards away I Given is an ordered deck of n cards numbered 1 to n with card 1 at the top ...
- 紫书第五章训练2 F - Compound Words
F - Compound Words You are to find all the two-word compound words in a dictionary. A two-word compo ...
- 正则表达式引擎的构建——基于编译原理DFA(龙书第三章)——3 计算4个函数
整个引擎代码在github上,地址为:https://github.com/sun2043430/RegularExpression_Engine.git nullable, firstpos, la ...
- 周志华-机器学习西瓜书-第三章习题3.5 LDA
本文为周志华机器学习西瓜书第三章课后习题3.5答案,编程实现线性判别分析LDA,数据集为书本第89页的数据 首先介绍LDA算法流程: LDA的一个手工计算数学实例: 课后习题的代码: # coding ...
- 【转载】Java垃圾回收内存清理相关(虚拟机书第三章),GC日志的理解,CPU时间、墙钟时间的介绍
主要看<深入理解Java虚拟机> 第三张 P84 开始是垃圾收集相关. 1. 1960年诞生于MIT的Lisp是第一门采用垃圾回收的语言. 2. 程序计数器.虚拟机栈.本地方法栈3个区域随 ...
- 紫书第5章 C++STL
例题 例题5-1 大理石在哪儿(Where is the Marble?,Uva 10474) 主要是熟悉一下sort和lower_bound的用法 关于lower_bound: http://blo ...
- ROS机器人程序设计(原书第2版)补充资料 (叁) 第三章 可视化和调试工具
ROS机器人程序设计(原书第2版)补充资料 (叁) 第三章 可视化和调试工具 书中,大部分出现hydro的地方,直接替换为indigo或jade或kinetic,即可在对应版本中使用. ~$ rosl ...
- linux内核设计与实现一书阅读整理 之第三章
chapter 3 进程管理 3.1 进程 进程就是处于执行期的程序. 进程就是正在执行的程序代码的实时结果. 内核调度的对象是线程而并非进程. 在现代操作系统中,进程提供两种虚拟机制: 虚拟处理器 ...
随机推荐
- Windows使用MySQL数据库管理系统中文乱码问题
声明:本文关于MySQL中文乱码问题的解决方案均基于Windows 10操作系统,如果是Linux系统会有较多不适用之处,请谨慎参考. 一.MySQL中文乱码情况 1. sqlDevelper远程登陆 ...
- SPOJ SORTBIT Sorted bit squence (数位DP,入门)
题意: 给出一个范围[m,n],按照二进制表示中的1的个数从小到大排序,若1的个数相同,则按照十进制大小排序.求排序后的第k个数.注意:m*n>=0. 思路: 也是看论文的.一开始也能想到是这种 ...
- Java TCP通信
1.Socket原理 1)Socket简介 socket通常称作“套接字”,用于描述IP地址和端口号,是一个通信链的句柄.在Internet上的主机一般运行了多个服务软件,同时提供几种服务.每种服务都 ...
- Problem Y: 哪一天,哪一秒?
Problem Y: 哪一天,哪一秒? Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 337 Solved: 196[Submit][Status][ ...
- Luogu P2073 送花
权值线段树的模板题 然而AC后才发现,可以用\(\tt{set}\)水过-- 权值线段树类似于用线段树来实现平衡树的一些操作,代码实现还是比较方便的 #include<iostream> ...
- PhoneGap+JQuery Mobile移动应用开发学习笔记
最近一直在学习使用PhoneGap+JQuery Mobile的开发框架开发Android应用,抛开这个框架的运行效率不说,暂且将使用中遇到的问题进行一下整理. 1.JS文件引用顺序 也许在进行web ...
- mysql 定时任务job
mysql 定时任务job 1.通过show EVENTS显示当前定义的事件 2.检查event_scheduler状态:SHOW VARIABLES LIKE 'event_scheduler' 3 ...
- iOS--获取文件目录的方法
很多文章都有写这个问题,我只是为了记录一下,免得总翻书... 1.Documents 目录: 你应该将所有的应用程序数据文件写入到这个目录下.这个目录用于存储用户数据或其它应该定期备份的信息. 2.L ...
- 在2d游戏中常用的向量方式
function cc.exports.VectorRotateByAngle(vector,angle)--计算向量旋转后的向量,angle:正数逆时针,负输顺时针 angle = angle*ma ...
- (转发)IOS高级开发~Runtime(四)
用C代替OC: #import <objc/runtime.h> #import <objc/message.h> #import <stdio.h> extern ...