Crossword Answer UVa232
2016-03-09 19:03
477 查看
Crossword Answer
[align=left]这是一道比较基础的题目,放在《算法竞赛入门经典》第三章,主要是考了字符串和数组,有点需要基本功。[/align]
[align=left]题目的意思是一个给定一个R*C的方格,上面有些有字母,有些是空的,然后要找出上面所有横向的和纵向的单词。单词要求必须从最边界开始或者从一个空格之后或者空格之下开始。[/align]
[align=left]然后还有一个地方就是每个单词都要有序号,序号先列后行,但是输出的时候又要先输出行,所以每个列要记录起来,输完行了再输出了列,这样有点小麻烦,不过耐心一点也还好。[/align]
[align=left]最后有一个注意的地方是输出,要严格的看清楚输出格式,这个很容易出错。输出要求每两个输出之间要有空行,序号还要占3列输出。[/align]
[align=left]代码如下:[/align]
#include <iostream> #include <stdio.h> #include <cstring> using namespace std; int r, c; void getAcross(char cross[10][10], int i, int j)//直接输出横向上面的单词 { while (i < r && j < c && cross[i][j] != '*') { cout << cross[i][j]; j++; } cout << endl; } void getDown(char cross[10][10],char line[1000][15], int i, int j, int x, int y) { while (i < r && j < c && cross[i][j] != '*')//记录到line数组里面去 { line[x][y] = cross[i][j]; i++; y++; } line[x][y] = '\0'; } int main() { char cross[10][10],line[1000][15];//line数组用来存放碰到的列方向上的单词 int i, j, ALL = 1; while (cin >> r, r) { cin >> c; getchar(); for (i = 0; i < r; i++) cin >> cross[i]; int num = 1,curX = 0, curY = 0; //curX,curY用来记录当前line数组的位置。 if(ALL != 1) cout << endl;//如果是第一组,打印一个换行 cout << "puzzle #" << ALL++ << ":" << endl; cout << "Across" << endl; for (i = 0; i < r; i++) { for (j = 0; j < c; j++) { if (cross[i][j] == '*') continue; bool log = 0;//判断当前位置是否构成单词,然后控制序号num的增加 if ((j == 0 && cross[i][j] != '*') || (j != 0 && cross[i][j - 1] == '*'))//如果碰到横向的单词,直接输出 { printf("%3d.",num); getAcross(cross, i, j); log = 1; } if ((i == 0 && cross[i][j] != '*') || (i != 0 && cross[i - 1][j] == '*'))//列向的单词,不输出,记录起来 { line[curX][curY] = num + '0'; getDown(cross, line, i, j, curX, curY+1); curX++; curY = 0; log = 1; } if(log) num++; } } cout << "Down" << endl; int temp; for (i = 0; i < curX; i++)//输出列方向上的单词 { temp = line[i][0] - '0'; printf("%3d.", temp); for (j = 1; line[i][j];j++) cout << line[i][j] ; cout << endl; } /* cout << endl; for (i = 0; i < r; i++) cout << cross[i] << endl; */ } //while (1) getchar(); return 0; } /* 2 2 AT *O 6 7 AIM*DEN *ME*ONE UPON*TO SO*ERIN *SA*OR* IES*DEA */
相关文章推荐
- 3月7日薛老师讲义
- Android沉浸式状态栏
- 九宫格程序代码 共享并希望大家多提意见
- 《算法竞赛入门经典》5.22阶乘的精确值
- CodeForces 630K: Indivisibility【容斥】
- 挑竹签
- Java多线程学习(九)
- JS总结
- Codeforces #345 div1 A. Watchmen 数学
- poj2362 Square DFS剪枝
- BZOJ_P1228 [SDOI2009]E&D(博弈+SG函数+打表)
- BZOJ1711Dingin吃饭
- 魔方阵
- Android项目使用Ant多渠道打包(最新sdk)
- C++中this指针的用法详解 http://blog.chinaunix.net/uid-21411227-id-1826942.html
- yii2扩展yii2-imagine遇到的问题
- 数据库中的实例名和数据库名有什么不同?
- IOS压缩解压缩
- Ruby中如何识别13位的时间戳
- 一行代码设置UITableView分割线的长度