1036. Crypto Columns

#include <iostream>
#include <cstdlib>
#include <string>
using namespace std;

int main(){
    
    string key;
    string cText;
    char pText[101][101];
    int cols;
    int rows;
    
    while(1){
       cin >> key;
       if(key == "THEEND")
          break;
       cin >> cText;
       cols = key.length();
       rows = cText.length()/cols;
       
       int a[101];
       char temp;
       int index;
       int count = 0;
       //功能: 
       //因为扫描key时,i不断往后移动,而前面可能有重复相同的被扔到了后面
       //例如 ABBACD,你得到的a数组是 032146 而正确的是031246. 因为你扫完
       //两个A后,此时的i已经移到了i=2(这里是B),而i=1处也有一个B,这样由于
       //你的条件temp > key[j] 才交换位置,所以导致了i=2排在了i=1的前面 
       
       /*错误做法:因为扫描key时,i不断往后移动,而前面可能有重复相同的被扔到了后面
                  例如 ABBACD,你得到的a数组是 032146 而正确的是031246. 因为你扫完
                  两个A后,此时的i已经移到了i=2(这里是B),而i=1处也有一个B,这样由于
                 你的条件temp > key[j] 才交换位置,所以导致了i=2排在了i=1的前面 
        */ 
     /*    
       for(int i=0;i<key.length();i++){
           //错误1:添加此语句后会有微妙错误,忽略与开头比较 
          // if (key[i] == 'a')
          //    continue;
           temp = key[i];
           index = i;
           for (int j=0;j<key.length();j++){
               //if(key[j]=='a')
               //    continue;
                if(temp > key[j]) 
                   { 
                   temp = key[j];
                   index = j;
                   } 
               }
           a[i] = index;
           key[index] = 'a';
           
       }
        */ 
               
       
       for(int i=0;count<=key.length();i++){
           if (key[i] == 'a')
              continue; 
           temp = key[i];
           index = i;
           for (int j=0;j<key.length();j++){
               if(key[j]=='a')
                   continue;
                if(temp > key[j]) //错误2:A在B前面,但是'A'<'B',注意字符比大小 
                   { 
                   temp = key[j];
                   index = j;
                   } 
               }
           //a[index]=i 错误3:应为a[i]=index; 
           a[count++] = index; //重点1:使用count作为计数变量 
           key[index] = 'a';
           i=0;
       }
       

       for (int i=0;i<key.length();i++){
            
            //cols = a[i]; i<cols;错误4:将cols作为循环变量 
            int col = a[i];
            for(int j=0;j<rows;j++){
                pText[j][col] = cText[i*rows+j]; 
            }
       }
       
       for (int i=0;i<rows;i++){
            for(int j=0;j<key.length();j++){
                cout << pText[i][j]; 
            } 
       } 
       cout << endl; 
    }
    return 0;
}

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值