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;
}