//Problem:hdu1200
//Data:2011.11.1
#include <iostream>
using namespace std;
char line[220];
int main()
{
//freopen("E:\\in.txt","r",stdin);
int n,i,j;
char c;
bool flag;
while(cin>>n, n)
{
cin.get();//clear '\n'
// 读一整行,然后按下标把每个打印出来,不用对数组重排
cin.getline(line,220);
int len = strlen(line);
//输出……
for(i=0; i<n; i++)
{
int dis = (n-1) - i*2; //dis表示元素离中间点的距离,比较抽象,不要理解我的代码了
//这思路怕是过段时间我自己都忘了(很土的思路~ - -!)
//比如拿0,1,2,3,4 来试,假设有5列, 即n=5
//开始时 i=0
// dis = 4-0 -0*2 = 4 为什么是这么算,其实是按对称算的,2是轴
// 然后,开始输出第一列,当然是逻辑上的第一列
// 因为是左右摇摆的,所以用flag标记一下
if(dis < 0)
{
dis = -dis;
flag = false;
}
else
flag = true;
for(j=i; j<len; )
{
cout << line[j];
j+=n;
flag ? j+=dis : j-=dis;
flag = !flag;
}
}
cout << endl;
}
return 0;
}
HDU 1200
最新推荐文章于 2020-08-21 08:22:53 发布