UESTC 1063 易位法字符串加密

/*假设密钥的长度为 M ,相当于把明文按顺序分成了 M 块,每块长度不齐的地方补 E ,对密钥进行枚举,每次把最小的且没有被标记过的那一块字符串输出,其实还是一个模拟类型的题目,细心就好。*/

  1. #include<functional>  
  2. #include<algorithm>  
  3. #include<iostream>  
  4. #include<fstream>  
  5. #include<sstream>  
  6. #include<iomanip>  
  7. #include<numeric>  
  8. #include<cstring>  
  9. #include<cassert>  
  10. #include<cstdio>  
  11. #include<string>  
  12. #include<vector>  
  13. #include<bitset>  
  14. #include<queue>  
  15. #include<stack>  
  16. #include<cmath>  
  17. #include<ctime>  
  18. #include<list>  
  19. #include<set>  
  20. #include<map>  
  21.   
  22. using namespace std;  
  23.   
  24. char s1[25],s2[1010],s[1010];  
  25.   
  26. int main()  
  27. {  
  28.     gets(s1);  
  29.     gets(s);  
  30.     int len1=strlen(s1);  
  31.     int len=strlen(s);  
  32.     int len2=0;  
  33.     for(int i=0;i<len;i++)  
  34.       if(s[i]!=' ')  
  35.         s2[len2++]=s[i];  
  36.     int Len;  
  37.     s2[len2]='\n';  
  38.     if(len2%len1) Len=(len2/len1+1)*len1;  
  39.     else Len=len2;  
  40.     bool vis[25];  
  41.     memset(vis,false,sizeof(vis));  
  42.     for(int i=1;i<=len1;i++){  
  43.       int minn=200,k;  
  44.       for(int j=0;j<len1;j++)  
  45.         if(!vis[j]&&s1[j]<minn){  
  46.           minn=s1[j];k=j;  
  47.         }  
  48.       vis[k]=true;  
  49.       int j;  
  50.       for(j=k;j<len2;j+=len1)  
  51.         (s2[j]>'Z') ? printf("%c",s2[j]-32) : printf("%c",s2[j]);  
  52.       if(j<Len) cout<<"E";  
  53.     }  
  54.     cout<<endl;  
  55.     return 0;  
  56. }                     

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值