Oj-NOI 1.8 20:反反复复
http://noi.openjudge.cn/ch0108/20/
题目
描述
Mo和Larry发明了一种信息加密方法。他们首先决定好列数,然后将信息(只包含字母)从上往下依次填入各列,并在末尾补充一些随机字母使其成为一个完整的字母矩阵。例如,若信息是“There’s no place like home on a snowy night”并且有5列,Mo会写成:
t o i o y
h p k n n
e l e a i
r a h s g
e c o n h
s e m o t
n l e w x
注意Mo只会填入字母,且全部是小写形式。在这个例子中,Mo用字母“x”填充了信息使之成为一个完整的矩阵,当然他使用任何字母都是可以的。
Mo根据这个矩阵重写信息:首先从左到右写下第一行,然后从右到左写下第二行,再从左到右写下第三行……以此左右交替地从上到下写下各行字母,形成新的字符串。这样,例子中的信息就被加密为:toioynnkpheleaigshareconhtomesnlewx。
你的工作是帮助Larry从加密后的信息中还原出原始信息(包括填充的字母)。
输入
第一行包含一个整数(范围2到20),表示使用的列数。
第二行是一个长度不超过200的字符串。
输出
一行,即原始信息。
样例输入
5
toioynnkpheleaigshareconhtomesnlewx
样例输出
theresnoplacelikehomeonasnowynightx
题解
这道题可分为两步
首先是蛇形将字符串放入数组
然后是按列将字符数组输出
这道题比较大的一个问题就是:
关于怎么把string放入char二维数组还不乱码?
以下给出三种方法
1、array
2、定义为int二维数组,输出char强制转换
3、char二维数组定义在main函数外
参考代码
char数组定义为array
#include<iostream>
#include<string>
#include <array>
#include<math.h>
#include<algorithm>
using namespace std;int main()
{int n; cin >> n;string s;cin >> s;int row = s.length();row = ceil(row / n);array<array<char, 22>, 22>charmat;for (int i = 0; i < row; i++) {for (int j = 0; j < n; j++) {charmat[i][j]=s[i*n+j];}if (i % 2) {reverse(charmat[i].begin(), charmat[i].begin() + n);}}for (int j = 0; j < n; j++) {for (int i = 0; i < row; i++) {cout << charmat[i][j];}}//for (int i = 0; i < row; i++) {// for (int j = 0; j < n; j++) {// cout << charmat[i][j] << " ";// }// cout << endl;//}return 0;
}
参考2
将char定义为int数组,最后强制输出
#include<iostream>
#include<cstring>
using namespace std;
int n;char s[250];
int l,s1[250][250],ans=0;
int main()
{cin>>n>>s;
l=strlen(s);
int k=0;
for(int i=0;i<l/n;i++)
for(int j=0;j<n;j++){if(!(i%2))s1[i][j]=s[k++];
else s1[i][n-1-j]=s[k++];
}
while(ans<n){for(int i=0;i<l/n;i++)
cout<<char(s1[i][ans]);
ans++;
}
return 0;
}
我的代码
#include<iostream>
#include<cstring>
#include<string>
using namespace std;char s1[250];
char c1[300][300];
int main()
{int n;//string s1;//char s1[250];//char c1[300][300];cin >> n;cin >> s1;int i = 0, j = 0, k = 0;//int l = s1.length();int l = strlen(s1);int m = l / n;for (i = 0; i < m; i++){if (i % 2 == 0){for (j = 0; j < n; j++){c1[i][j] = s1[k];k++;}}else{for (j = n - 1; j >= 0; j--){c1[i][j] = s1[k];k++;}}/*另一种写法for (j = 0; j < n; j++){c1[i][j] = s1[k];k++;}if (i < m){i++;for (j = n - 1; j >= 0; j--){c1[i][j] = s1[k];k++;}}*/}for (j = 0; j < n; j++){for (i = 0; i < m; i++){cout<<c1[i][j];}}return 0;
}
如果9分错误,可能是因为数组开的不够大
另外char二维数组定义在main函数外面调试就是正常的,而定义在main函数里面就会一直“烫烫烫烫……”,调试时也会显示,无法显示数组。我觉得可能和没有‘\0’有关,但为什么定义在main函数外就正常呢?
但定义在内外都可以通过
Oj-NOI 1.8 20:反反复复相关推荐
- OpenJudge NOI 1.8 20:反反复复
[题目链接] OpenJudge NOI 1.8 20:反反复复 [题目考点] 1. 二维数组 [解题思路] 将字符串中字符按照题目要求,一行从左向右,一行从右向左,填入二维数组中.再按列遍历二维数组 ...
- 百练noi 20:反反复复
20:反反复复 查看 提交 统计 提问 总时间限制: 1000ms 内存限制: 65536kB 描述 Mo和Larry发明了一种信息加密方法.他们首先决定好列数,然后将信息(只包含字母)从上往下 ...
- 信息学奥赛一本通 1141:删除单词后缀 | OpenJudge NOI 1.7 20
[题目链接] ybt 1141:删除单词后缀 OpenJudge NOI 1.7 20:删除单词后缀 [题目考点] 1. 字符串处理 2. string类成员函数 取子串:substr(起始位置, 子 ...
- 信息学奥赛一本通 1085:球弹跳高度的计算 | OpenJudge NOI 1.5 20
[题目链接] ybt 1085:球弹跳高度的计算 OpenJudge NOI 1.5 20:球弹跳高度的计算 [题目考点] 1. 循环 [解题思路] 1. 使用循环描述球的弹跳过程 2. 数学计算 分 ...
- OpenJudge NOI 1.4 20:求一元二次方程的根
[题目链接] OpenJudge NOI 1.4 20:求一元二次方程的根 [题目考点] 1. 一元二次方程求根 包括求实根与虚根 2. if-else if-else语句 3. 浮点数比较 [解题思 ...
- 信息学奥赛一本通 1037:计算2的幂 | OpenJudge NOI 1.3 20
[题目链接] ybt 1037:计算2的幂 OpenJudge NOI 1.3 20:计算2的幂 [题目考点] 1. 不同整型数据的范围 类型 占用字节数 可表示数字范围 char 1 -127~12 ...
- openjudge 1.8.20 反反复复
OpenJudge - 20:反反复复 解题思路: 1.由题可得,将一个加密的字符串还原后输出,那么首先看他的加密方式是怎样的,给定一个字符串,并且给定了列号,那么我们获取到字符串的长度就可以求出二维 ...
- NOI的1.8.20反反复复
描述 Mo和Larry发明了一种信息加密方法.他们首先决定好列数,然后将信息(只包含字母)从上往下依次填入各列,并在末尾补充一些随机字母使其成为一个完整的字母矩阵.例如,若信息是"There ...
- 【NOI OJ】一大波题正在飞来(ˉ▽ ̄~) 我才不是 Ctrl C + Ctrl V 的人呢
OpenJudge 登入 注册 管理员 frank 林舒 Dzx someone 李文新 公告 11-05 程序设计与算法(大学先修课) 成员(61647)查看全部 NOI(题库正在建设中,做题纪录有 ...
最新文章
- 盘点2018人工智能行业六大造假事件:科大讯飞罗生门仅仅是小儿科
- errno_t open_s()打开文件出现的错误分析
- 互联网协议入门(二)
- c语言万年历附加功能,万年历(c语言,多功能).doc
- python开发实践教程_Python开发实践教程
- nn.Dataparallel pytorch 平行计算的两种方法
- superset docker 部署
- 时序数据库InfluxDB 2.0 alpha 发布:主推新的Flux查询语言,TICK栈将成为整体
- C语言:采用交互式方式打开指定的文件,若文件打开成功,则显示该文件的大小,并显示文件内容,若文件打开失败,则提示出错信息
- Flash player 10(FLEX 4)的安全沙箱机制
- 最速下降法matlab全局最小值_MATLAB实现最速下降法
- 项目管理(PMP)》项目管理十大知识领域
- 基于OpenSSL的CA建立及证书签发(签发单域名/IP)
- 企业家普遍关注的问题是什么?
- HYDU_create_process (./utils/launch/launch.c:75): execvp error on file *
- 打怪升级之小白的大数据之旅(六十七)<Hive旅程第八站:Hive的函数>
- 建立一个Point类,包含数据成员x,y,实现需要的成员函数,并设计main函数完成测试
- html-css13 flex弹性盒 W3school导航条另一种写法 淘宝的导航条
- 基于51单片机直流电压电流表设计LCD1602液晶仿真资料DIY电子制作
- 基于poi包的流式文件和版式文件操作工具