Sicily 1036——令人纠结的数组下标

题意:给出一个密钥字符串,假设其长度为k,然后再给出一个明文字符串,以k为段长不断截出来,构成一个矩阵,最后一行剩余的空位随便怎么补齐,这样横着放好之后,再竖着一列一列输出,但是不是简单地从左到右,而是按照密钥字符串中的字符排序进行。要求输入密钥字符串和密文字符串,输出明文字符串。

 

数组的下标计算颇为纠结,像这种题就应该老老实实在草稿纸上模拟一下,空想很容易想错的。代码如下:

 

 1 // Problem#: 1036
 2 // Submission#: 2194504
 3 // The source code is licensed under Creative Commons Attribution-NonCommercial-ShareAlike 3.0 Unported License
 4 // URI: http://creativecommons.org/licenses/by-nc-sa/3.0/
 5 // All Copyright reserved by Informatic Lab of Sun Yat-sen University
 6 #include<iostream>
 7 #include<cstring>
 8 #include<cstdio>
 9 
10 using namespace std;
11 
12 int main()
13 {
14     char keyword[11];
15     char ciphertext[101];
16     char mat[101][101];
17     int order[11];
18 
19     while((cin>>keyword) && strcmp(keyword, "THEEND") != 0)
20     {
21         cin>>ciphertext;
22         int length = strlen(keyword);
23         int size = strlen(ciphertext)/length;
24         for(int i = 0; i < length; i ++)
25             order[i] = i;
26         for(int i = length - 2; i > -1; i --)
27             for(int j = i; j < length - 1; j ++)
28                 if(keyword[j] > keyword[j+1])
29                 {
30                     char temp1 = keyword[j];
31                     keyword[j] = keyword[j+1];
32                     keyword[j+1] = temp1;
33                     int temp2 = order[j];
34                     order[j] = order[j+1];
35                     order[j+1] = temp2;
36                 }
37         
38         for(int i = 0; i < size; i ++) 
39             for(int j = 0; j < length; j ++)
40                 mat[i][order[j]] = ciphertext[j * size + i];
41         //每一行后面已经没有'\0'了,所以不要偷懒,二重循环输出每个字符,不然会很烫烫烫烫烫烫烫烫烫烫烫的
42         for(int i = 0; i < size; i ++)
43             for(int j = 0; j < length; j ++)
44                 cout<<mat[i][j];
45         cout<<endl;
46     }
47     return 0;
48 }                                     

 

转载于:https://www.cnblogs.com/warbean/p/3288235.html

1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值