hdu1998

/*
分析:
    水题,就是发现一个规律:
以每行l=n/2为中心,向两边延伸:向左下角就减1、向右上角就加1。而需要向左下角
进行的数量是随着行号递增的,一次增加1,初始为0。


注意left_temp是从-1开始的,因为我的代码在全图处理的时候,将l=n/2处的数据也处理了
一下。但是写代码的时候忘了,还是让left_temp从0开始了。以后写代码的时候,如果哪点儿用
了和平常不一样的方法,记录一下下,省的前面考虑了、后面给忘了(这种错误犯了好多次了

- -III)。

 还是细节决定成败吧。

                                                                     2012-04-11
*/








#include"stdio.h"
#include"string.h"
int main()
{
int T;
int n;
int num[19][19];
int k,i,l;
int left;
int temp;
int left_temp;
scanf("%d",&T);
while(T--)
{
memset(num,0,sizeof(num));
scanf("%d",&n);
for(i=0;i<n;i++)
num[i][n/2]=1+i*(n+1);


for(k=left=0;k<n;k++,left++)
{
//处理右上角
temp=num[k][n/2];
for(left_temp=-1,i=k,l=n/2;left_temp<n-1-left;i--,l++,left_temp++)
{
if(i<0)
i=n-1;
if(l>=n)
l=0;
num[i][l]=temp;
temp++;
}
//处理左下角
temp=num[k][n/2];
for(left_temp=-1,i=k,l=n/2;left_temp<left;i++,l--,left_temp++)
{
if(i>=n)
i=0;
if(l<0)
l=n-1;
num[i][l]=temp;
temp--;
}
}


for(i=0;i<n;i++)
{
for(l=0;l<n;l++)
printf("%4d",num[i][l]);
printf("\n");
}
}
return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值