1424:螺旋数组

对于一个正整数n(1<=n<=9),输出从1到n的平方的螺旋数组。

输入

多组测试实例。

每个测试实例输入一个整数n(1<=n<=9)。

输出

输出从1到n的平方的螺旋数组。每一行两个数字中间用一个空格隔开。

样例输入 Copy
3
4
样例输出 Copy
1 2 3
8 9 4
7 6 5
1 2 3 4
12 13 14 5
11 16 15 6
10 9 8 7

 这题也是参考了佬的代码,比较巧妙的是算出来应该螺旋的圈数,然后每一圈进行向右向下向左向上转,在更新的时候也需要注意边界

#include<iostream>
#include<algorithm>
#include<cstring>
int main()
{
	int n;
	int a[10][10];
	while(scanf("%d",&n)!=EOF){
		int count=1,lend=n,kend=n/2,i,j,k;//count记录数,lend记录每次转一个圈时的长度,kend记录转几圈
		for(i=0,j=0,k=0;k<kend;k++){
			a[i][j]=count++;
			for(j++;j<lend;j++){//向右走,长度不超过lend
				a[i][j]=count++;
			}
			for(j--,i++;i<lend;i++){//这时j出界了,应该减一然后向下走,不超过lend
				a[i][j]=count++;
			}
			for(i--,j--;j>=k;j--){//i出界减一后再向左走,他的左边界是k
				a[i][j]=count++;
			}
			for(j++,i--;i>k;i--){//j出界j加一之后向上走,因为向上走的时候最上面的位置已经被占用所以边界是k+1
				a[i][j]=count++;
			}
			i++,j++,lend--;//当转过一圈之后i出界减一,向右走,长度减一
		}
		if(n%2!=0){//当是奇数的时候说明最后中间还有一个数
			a[i][j]=count;
		}
		for(int i=0;i<n;i++){
			for(int j=0;j<n;j++){
				if(j!=0)printf(" ");
				printf("%d",a[i][j]);
			}
			printf("\n");
		}
	}
	return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值