1714: 含蓄的情书
Time Limit: 1 Sec Memory Limit: 128 MB
Submit: 211 Solved: 61
Description
情书怎么才比较含蓄?我来教你。首先你需要几张4*4的表格,然后把你想写的话填进去。比如:你想说的话是"abcdefghijklmnopqrstu"(shen me gui),那么填入表格就成了这样:
第一张表:
abcd
efgh
ijkl
mnop
第二张表:
qrst
u---
----
----
由于这段话比16个字长,所以填了两张表,要是更长就用更多的表,末尾空闲的地方用‘-‘来填充。
然后精彩的地方来了。你告诉妹子密码。密码有三种,用123表示,三种密码对应不同的加密方式。下面是三种密码分别加密出的话,简单观察你就会发现加密的规律了。
1:mieanjfbokgcplhd--uq---r---s---t
2:ponmlkjihgfedcba-----------utsrq
3:dhlpcgkobfjnaeimt---s---r---qu--
好了,相信大家已经学会这项技术了。新一批的小学妹就要“进货”了,人数众多呀,情书加密工作比较困难,就请大家来帮忙啦。
Input
多组测试数据
每组测试数据有两行,
第一行一个数k( 1 <= k <= 3 ),表示加密方式
第二行表示加密的情书(由大小写字母,数字,空格组成,长度不超过100)
Output
对于每组测试数据,输出加密后的密文。
Sample Input
1abcdefghijklmnopqrstu2a b c d 0 1 2 3 4
Sample Output
mieanjfbokgcplhd--uq---r---s---t 3 2 1 0 d c b a---------------4
HINT
Source
虽说是道水题,但是花了不少时间。。找错误d数组中的字符给a数组时开始有问题,我一直找毛病。。终于弄好了。
#include<iostream> #include<string.h> using namespace std; int main() { int k,i,j,len,g,flag; char d[110]; char a[28][4]; while(scanf("%d",&k)!=EOF) { getchar(); gets(d); flag=0; for(i=0;i<28;i++) { for(j=0;j<4;j++) a[i][j]='-'; } len=strlen(d); g=0; for(i=0;i<28;i++) { for(j=0;j<4;j++) { a[i][j]=d[g++]; if(g==len) { flag=1; break; } } if(flag) break; } if(k==1) { if(len%16==0)//3 7 11 { for(g=1;g<=len/16;g++) for(j=0;j<4;j++) for(i=4*g-1;i>=4*g-4;i--) cout<<a[i][j]; } else { for(g=1;g<=len/16+1;g++) for(j=0;j<4;j++) for(i=4*g-1;i>=4*g-4;i--) cout<<a[i][j]; } } else if(k==2) { if(len%16==0)//3 7 11 { for(g=1;g<=len/16;g++) for(i=4*g-1;i>=4*g-4;i--) for(j=3;j>=0;j--) cout<<a[i][j]; } else { for(g=1;g<=len/16+1;g++) for(i=4*g-1;i>=4*g-4;i--) for(j=3;j>=0;j--) cout<<a[i][j]; } } else if(k==3) { if(len%16==0)//3 7 11 { for(g=1;g<=len/16;g++) for(j=3;j>=0;j--) for(i=4*g-4;i<=4*g-1;i++) cout<<a[i][j]; } else { for(g=1;g<=len/16+1;g++) for(j=3;j>=0;j--) for(i=4*g-4;i<=4*g-1;i++) cout<<a[i][j]; } } cout<<endl; } return 0; }
时间: 2024-10-24 17:05:39