1. 程式人生 > >HihoCoder 1632 Secret Poems(模擬)

HihoCoder 1632 Secret Poems(模擬)

將左邊的圖按順序輸出成右邊的圖

大致思路是左右2個指標去填充。

所以要做到知道x,y就知道箭頭方向。那麼就是看規律了。

對於左邊這張圖,我們可以看出→和↓都在四周出現,之後通過x與y的和的奇偶來判↗和↙5

對於右圖螺旋線,我們和劃一個叉叉 ,把它變成四部分,然後就可以看出規律了。。。類似於平面直角座標系中有2條

直線相交產生的4個扇面,每個扇面都有相應的關於x和y的規律

#include<bits/stdc++.h>
using namespace std;
int main()
{
	int n;
	char a[111][111];
	while(~scanf("%d",&n))
	{
		for(int i=1;i<=n;i++)
		{
			scanf("%s",a[i]+1);
		}
		int js=n*n-1;
		int lx=1;
		int ly=1;
		int rx=1;
		int ry=1;
		char b[111][111];
		b[rx][ry]=a[lx][ly];
		while(js)
		{
			js--;
			if((lx+ly)%2==0&&lx==1&&ly!=n)
			ly++;
			else if((lx+ly)%2==1&&lx==n&&ly!=n)
			ly++;
			else if((lx+ly)%2==1&&ly==1&&lx!=n)
			lx++;
			else if((lx+ly)%2==0&&ly==n&&lx!=n)
			lx++;
			else if((lx+ly)%2==1)
			lx++,ly--;
			else if((lx+ly)%2==0)
			lx--,ly++;
			if(rx+ry<n+1&&(ry+1)>=rx)
			{
				ry++;
			}
			else if(rx+ry>=n+1&&ry>rx)
			{
				rx++;
			}
			else if(rx>=ry&&rx+ry>n+1)
			{
				ry--;
			}
			else rx--;
			b[rx][ry]=a[lx][ly];
			//cout<<lx<<" "<<ly<<"->"<<rx<<" "<<ry<<endl;
		}
		for(int i=1;i<=n;i++)
		{
			for(int j=1;j<=n;j++)
			cout<<b[i][j];
			cout<<endl;
		}
	}
    return 0;
}