sicily1036. Crypto Columns

来源:互联网 发布:淘宝双十一总销售额 编辑:程序博客网 时间:2024/06/02 02:08

sicily上一道挺简单的题,关键是搞清楚各字符之间的输出顺序。

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

char a[11][11];
int num[11];

int main()
{
 string str1,str2;
 while(cin>>str1&&str1!="THEEND")
 {
  cin>>str2;
  int len=str2.size()/str1.size();
  int v=0,sum=0;
  memset(num,0,sizeof(num));          //初始化num数组
  char c;
  for(int k=0;k<str1.size();k++)
  {
   for(int i=0;i<str1.size();i++)   //从关键字开始搜索各字母的排位情况
   {
    if(!num[i])
    {
     c=str1[i];
     v=i+1;
     break;
    }
   }
   for(int j=0;j<str1.size();j++)  //每次找出剩余关键字中最小的字母
   {
    if(str1[j]<c&&num[j]==0)
    {
     c=str1[j];
     v=j+1;               
    }
   }
   num[v-1]=1;                     //对已操作的字母做上标记
   for(int w=1;w<=len;w++)
   {
    a[w][v]=str2[sum++];        //根据字母的排位情况依次往二维字符数组里面填字符
   }
  }
  for(int i=1;i<=len;i++)            //输出密文
  {
   for(int j=1;j<=str1.size();j++)
   {
    cout<<a[i][j];
   }
  }
  cout<<endl;
 }
 return 0;
}