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:反反复复相关推荐

  1. OpenJudge NOI 1.8 20:反反复复

    [题目链接] OpenJudge NOI 1.8 20:反反复复 [题目考点] 1. 二维数组 [解题思路] 将字符串中字符按照题目要求,一行从左向右,一行从右向左,填入二维数组中.再按列遍历二维数组 ...

  2. 百练noi 20:反反复复

    20:反反复复 查看 提交 统计 提问 总时间限制:  1000ms  内存限制:  65536kB 描述 Mo和Larry发明了一种信息加密方法.他们首先决定好列数,然后将信息(只包含字母)从上往下 ...

  3. 信息学奥赛一本通 1141:删除单词后缀 | OpenJudge NOI 1.7 20

    [题目链接] ybt 1141:删除单词后缀 OpenJudge NOI 1.7 20:删除单词后缀 [题目考点] 1. 字符串处理 2. string类成员函数 取子串:substr(起始位置, 子 ...

  4. 信息学奥赛一本通 1085:球弹跳高度的计算 | OpenJudge NOI 1.5 20

    [题目链接] ybt 1085:球弹跳高度的计算 OpenJudge NOI 1.5 20:球弹跳高度的计算 [题目考点] 1. 循环 [解题思路] 1. 使用循环描述球的弹跳过程 2. 数学计算 分 ...

  5. OpenJudge NOI 1.4 20:求一元二次方程的根

    [题目链接] OpenJudge NOI 1.4 20:求一元二次方程的根 [题目考点] 1. 一元二次方程求根 包括求实根与虚根 2. if-else if-else语句 3. 浮点数比较 [解题思 ...

  6. 信息学奥赛一本通 1037:计算2的幂 | OpenJudge NOI 1.3 20

    [题目链接] ybt 1037:计算2的幂 OpenJudge NOI 1.3 20:计算2的幂 [题目考点] 1. 不同整型数据的范围 类型 占用字节数 可表示数字范围 char 1 -127~12 ...

  7. openjudge 1.8.20 反反复复

    OpenJudge - 20:反反复复 解题思路: 1.由题可得,将一个加密的字符串还原后输出,那么首先看他的加密方式是怎样的,给定一个字符串,并且给定了列号,那么我们获取到字符串的长度就可以求出二维 ...

  8. NOI的1.8.20反反复复

    描述 Mo和Larry发明了一种信息加密方法.他们首先决定好列数,然后将信息(只包含字母)从上往下依次填入各列,并在末尾补充一些随机字母使其成为一个完整的字母矩阵.例如,若信息是"There ...

  9. 【NOI OJ】一大波题正在飞来(ˉ▽ ̄~) 我才不是 Ctrl C + Ctrl V 的人呢

    OpenJudge 登入 注册 管理员 frank 林舒 Dzx someone 李文新 公告 11-05 程序设计与算法(大学先修课) 成员(61647)查看全部 NOI(题库正在建设中,做题纪录有 ...

最新文章

  1. 盘点2018人工智能行业六大造假事件:科大讯飞罗生门仅仅是小儿科
  2. errno_t open_s()打开文件出现的错误分析
  3. 互联网协议入门(二)
  4. c语言万年历附加功能,万年历(c语言,多功能).doc
  5. python开发实践教程_Python开发实践教程
  6. nn.Dataparallel pytorch 平行计算的两种方法
  7. superset docker 部署
  8. 时序数据库InfluxDB 2.0 alpha 发布:主推新的Flux查询语言,TICK栈将成为整体
  9. C语言:采用交互式方式打开指定的文件,若文件打开成功,则显示该文件的大小,并显示文件内容,若文件打开失败,则提示出错信息
  10. Flash player 10(FLEX 4)的安全沙箱机制
  11. 最速下降法matlab全局最小值_MATLAB实现最速下降法
  12. 项目管理(PMP)》项目管理十大知识领域
  13. 基于OpenSSL的CA建立及证书签发(签发单域名/IP)
  14. 企业家普遍关注的问题是什么?
  15. HYDU_create_process (./utils/launch/launch.c:75): execvp error on file *
  16. 打怪升级之小白的大数据之旅(六十七)<Hive旅程第八站:Hive的函数>
  17. 建立一个Point类,包含数据成员x,y,实现需要的成员函数,并设计main函数完成测试
  18. html-css13 flex弹性盒 W3school导航条另一种写法 淘宝的导航条
  19. 基于51单片机直流电压电流表设计LCD1602液晶仿真资料DIY电子制作
  20. 基于poi包的流式文件和版式文件操作工具

热门文章

  1. 怎样在网页添加访问计数器?
  2. 粒子系统(二):绘制精美几何图案
  3. DXP软件使用快捷键
  4. c++基础知识点(6)类的继承,构造,析构顺序,虚继承等
  5. 数学基础科目经典教材
  6. 【MySQL】<关系型数据库>Linux安装MySQL(无错完整)
  7. querylist V4 图片下载
  8. 【笔记】unity渲染类名词术语概念总结(30个点)
  9. 第 04 课 用户管理
  10. ShowDoc在线文档工具的使用