nyoj題目33 蛇形填數
阿新 • • 發佈:2019-02-04
#include<stdio.h> int main() { int n,m,i,j,k=0,a[100][100],t=1; scanf("%d",&n); m=n; while(1) { for(i=m,j=n-m+1;j<=m;j++) { a[i-1][j-1]=t++; //printf("%d %d %d\n",a[i-1][j-1],i-1,j-1); if(t>n*n) { k=1; break; } } if(k==1)break; for(i-=1,j-=1;i>=n-m+1;i--) { a[i-1][j-1]=t++; //printf("%d %d %d\n",a[i-1][j-1],i-1,j-1); if(t>n*n) { k=1; break; } } if(k==1)break; for(i+=1,j-=1;j>=n-m+1;j--) { a[i-1][j-1]=t++; //printf("%d %d %d\n",a[i-1][j-1],i-1,j-1); if(t>n*n) { k=1; break; } } if(k==1)break; for(i+=1,j+=1;i<=m-1;i++) { a[i-1][j-1]=t++; //printf("%d %d %d\n",a[i-1][j-1],i-1,j-1); if(t>n*n) { k=1; break; } } if(k==1)break; m-=1; } for(j=0;j<n;j++) { for(i=0;i<n;i++) printf("%d ",a[i][j]); printf("\n"); } //while(1); return 0; }
自己想的演算法。先把數字放到對應的蛇形座標內,把橫豎座標都減一,把數字放到二維陣列中。然後用for輸出。
//學習演算法以後再用相應演算法寫一次。