学长说要把博客当错题本,好吧,今天确实考试了,QAQ…
考的NOip2015Day1的题,还比较简单,模拟就可以满分。对他们一定是拼手速的题吧。。。
自己写的代码片如下:
#include<iostream>#include<cstdio>using namespace std;int N,k;int a[100][100];int b[3000][3];int main(){ freopen("magic.in","r",stdin); freopen("magic.out","w",stdout); k=1; scanf("%d",&N); if(N==1) PRintf("1"); else{ a[1][N/2+1]=k; ++k; b[1][1]=1;b[1][2]=N/2+1; while(k<=N*N) { if(b[k-1][1]==1&&b[k-1][2]!=N) { a[N][b[k-1][2]+1]=k; b[k][1]=N; b[k][2]=b[k-1][2]+1; ++k; } else if(b[k-1][1]!=1&&b[k-1][2]==N) { a[b[k-1][1]-1][1]=k; b[k][1]=b[k-1][1]-1; b[k][2]=1; ++k; } else if(b[k-1][1]==1&&b[k-1][2]==N) { a[b[k-1][1]+1][b[k-1][2]]=k; b[k][1]=b[k-1][1]+1; b[k][2]=b[k-1][2]; ++k; } else if(b[k-1][1]!=1&&b[k-1][2]!=N) { if(a[b[k-1][1]-1][b[k-1][2]+1]==0) { a[b[k-1][1]-1][b[k-1][2]+1]=k; b[k][1]=b[k-1][1]-1; b[k][2]=b[k-1][2]+1; ++k; } else { a[b[k-1][1]+1][b[k-1][2]]=k; b[k][1]=b[k-1][1]+1; b[k][2]=b[k-1][2]; ++k; } } } for(int i=1;i<=N;++i) { for(int j=1;j<=N;++j) printf("%d ",a[i][j]); printf("/n"); } } fclose(stdin); fclose(stdout); return 0;}新闻热点
疑难解答