Hdu 1918

来源:互联网 发布:国外看病知乎 编辑:程序博客网 时间:2024/04/28 00:05

直接按题目意思模拟。。。

每到一个数,往右上角填,但有下面三个条件

1 如果超出上界,就去右边一列最底下那行 继续。

2 如果超出右界 ,就去上一行最左边那一列 继续。

3 如果右上角的数字 已经有了,就从这一列的底下这一行继续。

代码:

#include <stdio.h>#include <stdlib.h>#include <string.h>#include <time.h>#include <set>using namespace std;int mp[105][105];int main(){    int t,n;    scanf("%d",&t);    while(t--)    {        memset(mp,0,sizeof(mp));        scanf("%d",&n);        int x=1,y=(n/2)+1;        mp[x][y]=1;        int num=1;        int i,j;        while(num<n*n)        {            num++;            i=x-1,j=y+1;//指向右上角            if(i<=0)            i=n;            if(j>n)            j=1;            if(!mp[i][j])            {                mp[i][j]=num;                x=i;                y=j;            }            else            {                x=x+1;                mp[x][y]=num;            }        }        for(int i=1;i<=n;i++)        {            for(int j=1;j<=n;j++)            {                printf("%4d",mp[i][j]);            }            printf("\n");        }    }    return 0;}


原创粉丝点击