HDU 1200

 
//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)