HDU1986- Encoding
来源:互联网 发布:宁波淘宝开店培训机构 编辑:程序博客网 时间:2024/06/06 04:49
蛇形填数问题,首先打表所有字母和空格的字符串,然后将输入的字母和空格编码为一个contain字符串,然后蛇形填数即可。
但是需要注意的是填数时要让下标小于r*c,所以contain字符串中要向后补‘0’。
一开始一直让下标小于contain的长度,但是怎么也过不了….
//HDU1986#include <cstdio>#include <cstring>#include <string>using namespace std;char matrix[30][30];string list[27] = {"00000", "00001", "00010", "00011", "00100", "00101", "00110", "00111", "01000", "01001", "01010", "01011", "01100", "01101", "01110", "01111", "10000", "10001", "10010", "10011", "10100", "10101", "10110", "10111", "11000", "11001", "11010"};char s[500];int main(int argc, char const *argv[]) { int T; scanf("%d", &T); for (int t = 1; t <= T; t++) { memset(matrix, '*', sizeof(matrix)); int r, c; scanf("%d%d%*c", &r, &c); gets(s); string contain; for (int i = 0; i < strlen(s); i++) { int idx = (s[i] == ' ') ? 0 : s[i] - 'A' + 1; contain += list[idx]; } contain.resize(400, '0'); int i = 0, j = 0, k = 0; matrix[i][j] = contain[k++]; while (k < r * c) { while (j + 1 < c && matrix[i][j+1] == '*') { matrix[i][++j] = contain[k++]; } while (i + 1 < r && matrix[i+1][j] == '*') { matrix[++i][j] = contain[k++]; } while (j - 1 >= 0 && matrix[i][j-1] == '*') { matrix[i][--j] = contain[k++]; } while (i - 1 >= 0 && matrix[i-1][j] == '*') { matrix[--i][j] = contain[k++]; } } printf("%d ", t); for (i = 0; i < r; i++) { for (j = 0; j < c; j++) { if (matrix[i][j] == '*') { matrix[i][j] = '0'; } printf("%c", matrix[i][j]); } } putchar('\n'); } return 0;}
0 0
- HDU1986- Encoding
- hdu1986 Encoding-字符串(电文加密)
- Encoding
- Encoding
- encoding
- Encoding
- Encoding
- Encoding
- Encoding
- Encoding
- Encoding
- Encoding
- Encoding
- Encoding
- Encoding
- Encoding
- Encoding
- Encoding
- redis主从复制
- appfuse中遇到的一些问题
- cocos 优化
- MySQL 学习实践笔记(一)
- 面向接口编程
- HDU1986- Encoding
- C++初体验
- caffe源码阅读
- buildroot学习(六)——at91sam9g45软件平台更新
- 求叶子节点到根结点路径和为14,并且打印路径
- android关于多个控件绑定相同事件的问题
- MySQL 学习实践笔记(二)
- HDU1870-愚人节的礼物
- 自定义View详细使用