19.数圈

【问题描述】

以1为中心,用2,3,4, ..., n, ..., n*n的数字围绕着中心输出数圈, 如若n=4,则

7 8 9 10

6 1 2 11

5 4 3 12

16 15 14 13


【输入形式】

一个整数n(1<=n<=10)

【输出形式】

数圈矩阵

【样例输入】

5

【样例输出】

21 22 23 24 25
20 7 8 9 10
19 6 1 2 11
18 5 4 3 12
17 16 15 14 13

感悟:这题题目简单,但实现起来还是有点难的,最后借鉴了大佬的代码,实现了一遍最后才明白。感谢大佬。

#include<bits/stdc++.h>
using namespace std;
int main() {
	int n;
	cin>>n;
	int arr[n][n];
	int pos;
	if(n%2==0) pos=n/2-1;
	else pos=n/2;
	int left,right;
	left=right=pos;//从1开始 
	arr[pos][pos]=1;
	for(int i=2,temp=1; i<=n*n; temp++) {
		
		if(temp%2==1) { //temp为奇数 这个循环是向右下走

			for(int k=0; k<temp&&i<=n*n; k++)  arr[left][++right]=i++;//往右走

			for(int k=0; k<temp&&i<=n*n; k++)  arr[++left][right]=i++;//变方向,往下走
		} 
		else { //temp为偶数,这个循环是往左上走

			for(int k=0; k<temp&&i<=n*n; k++)  arr[left][--right]=i++;//往左走

			for(int k=0; k<temp&&i<=n*n; k++)  arr[--left][right]=i++;//变方向,往上走
		}
	}
	for(int i=0; i<n; i++) { //输出数组
		for(int j=0; j<n; j++)
			cout<<arr[i][j]<<' ';
		cout<<endl;
	}
	return 0;

}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值