码迷,mamicode.com
首页 > 其他好文 > 详细

2078 Problem H Secret Message

时间:2016-06-09 22:12:03      阅读:233      评论:0      收藏:0      [点我收藏+]

标签:

题目描述

Jack and Jill developed a special encryption method, so they can enjoy conversations without worrrying about eavesdroppers. Here is how: let L be the length of the original message, and M be the smallest square number greater than or equal to L. Add (M − L) asterisks to the message, giving a padded message with length M. Use the padded message to ?ll a table of size K × K, where K2= M. Fill the table in row-major order (top to bottom row, left to right column in each row). Rotate the table 90 degrees clockwise. The encrypted message comes from reading the message in row-major order from the rotated table, omitting any asterisks.

For example, given the original message ‘iloveyouJack’, the message length is L = 12. Thus the padded message is ‘iloveyouJack****’, with length M = 16. Below are the two tables before and after rotation.
技术分享
Then we read the secret message as ‘Jeiaylcookuv’.

输入

The ?rst line of input is the number of original messages, 1 ≤ N ≤ 100. The following N lines each have a message to encrypt. Each message contains only characters a–z (lower and upper case), and has length 1 ≤ L ≤ 10 000.

输出

For each original message, output the secret message.

样例输入

2
iloveyoutooJill
TheContestisOver

样例输出

iteiloylloooJuv
OsoTvtnheiterseC

解题心得:
  题意是输入字符串(长度L),然后将每个字符从上到下,从左到右挨着放到一个k*k的方格里,剩余的用*补上,然后将方格顺时针旋转一下(90度),然后在按照从上到下,从左到右的顺序输出(*省略掉)。K值:先把L开方,然后向上取整再加1,然后平方,即得到K的值。
  我在做的时候忘记了把X清零,结果又是浪费了时间。。。

代码:
 1 #include <iostream>
 2 #include <cstring>
 3 #include <cstdio>
 4 #include <cmath>
 5 
 6 using namespace std;
 7 
 8 int main()
 9 {
10     int n;
11     int x=0;
12     int size=0;
13     double k=0;
14     int k1=0;
15     int s;
16     char a[10000];
17     char c[100][100];
18     scanf("%d",&n);
19     for(int i=0;i<n;i++){
20         cin>>a;
21         size=strlen(a);
22         k=sqrt(size);
23         k1=ceil(k);
24         s=k1*k1;
25         if(size!=s){
26             int add=s-size;
27             for(int i1=0;i1<add;i1++){
28                 a[size+i1]=*;
29             }
30             a[size+add]=\n;
31         }
32          for(int j=0;j<k1;j++){
33                 for(int j1=0;j1<k1;j1++){
34                     c[j][j1]=a[x++];
35                 }
36             }
37             x=0; //做的时候被我落掉了,结果好久才找到错误!
38             for(int r=0;r<k1;r++){
39                 for(int p=k1-1;p>=0;p--){
40                     if(c[p][r]!=*){
41                         printf("%c",c[p][r]);
42                     }
43                 }
44             }
45             printf("\n");
46 
47     }
48     return 0;
49 }

 

2078 Problem H Secret Message

标签:

原文地址:http://www.cnblogs.com/TWS-YIFEI/p/5572743.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!