|
ZJU-2208:
我归纳了每次对输入的串的位置进行排序的规律,--
输入列数n;
输入串,以a1,a2,a3,a4....an代表;
循环i=n次,
每次循环中,第一次取(2*n-1)-2*i位置的字符,第二次取1+2*i位置的字符,把所取的字符顺序输出便是结果(没有完全证明,但是经过多次试验数据正确).但是没法AC,拜托各位赐教.
#include <iostream>
#include <stdio.h>
using namespace std;
struct str
{
char * s;
int length;
};
int main()
{
str s1[20];
str s2[20];
int i=0,q=0,m;
int k=0,j,g,c;
int n,p;
for(q=0;q<20;q++)
{
s1[q].length=0;
s1[q].s=(char*)malloc(200*sizeof(char));
s2[q].length=0;
s2[q].s=(char*)malloc(200*sizeof(char));
}
for(q=0;q<20;q++)
{
cin>>n;
if(n==0) break;
while(!scanf("%s",s1[q].s));
i=0;
while(s1[q].s!='\0')
{
s1[q].length++;
i++;
}
p=s1[q].length;
while(p%n!=0)
{
p=p+1;
s1[q].s[p]='x';
s1[q].s[p+1]='\0';
}
s1[q].length=p;
for(i=0;i<n;i++)
{
g=0;c=i;
s2[q].s[k]=s1[q].s[c];
for(j=0;j<s1[q].length/n;j++)
{
g++;
if(g%2!=0)
{
k++;
c=c+((2*n-1)-2*i);
s2[q].s[k]=s1[q].s[c];
}
if(g%2==0)
{
k++;
c=c+(1+2*i);
s2[q].s[k]=s1[q].s[c];
}
}
}
s2[q].s[k+1]='\0';
}
i=0;
for(m=0;m<q;m++)
{
while(s2[m].s!='\0')
{
cout<<s2[m].s;
i++;
}
cout<<endl;
}
return 0;
}
[ Last edited by Fach on 2005-6-22 at 17:03 ] |
|