HihoCoder 1632 Secret Poems(模擬)
阿新 • • 發佈:2018-12-19
將左邊的圖按順序輸出成右邊的圖
大致思路是左右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; }