• 2078 Problem H Secret Message 中石油-未提交-->已提交


    题目描述

    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 fill 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 first 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]='
    ';
    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("
    ");
    46 
    47     }
    48     return 0;
    49 }
  • 相关阅读:
    20200917-2 词频统计
    20200910-2 博客作业
    20200910-1 每周例行报告
    20200910-3命令行和控制台编程
    使用Requests库实现api接口测试(Python)
    Python Lambda函数的几种使用方法
    文本与向量之间的转换
    Oracle连接出现error: ORA-12505, TNS:listener does not currently know of SID given in connect descriptor
    一图看懂新一代人工智能知识体系大全
    SqlDeveloper连接MySQL出现The connection property ‘zeroDateTimeBehavior’ acceptable values are: ‘CONVERT_TO_NULL’, ‘EXCEPTION’ or ‘ROUND’. The value ‘convertToNull’ is not acceptable 错误
  • 原文地址:https://www.cnblogs.com/TWS-YIFEI/p/5572743.html
Copyright © 2020-2023  润新知