问题标题: 酷町堂:1805 蛇形填数

0
0
已解决
张恩泽
张恩泽
高级天翼
高级天翼

1805   蛇形填数经验值:0

题目描述 Description

在 n * n 方阵里填入 1 , 2 , 3 , … , n * n,要求填成蛇形。例如 n=4 时方阵为:

10  11  12  1
9   16  13  2
8   15  14  3
7   6   5   4

输入描述 Input Description

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

输出描述 Output Description

输出对应的蛇形方阵,所有数字占三个位宽,左对齐,数字和数字之间一个空格间隔

样例输入 Sample Input

4

样例输出 Sample Output

10 11 12 1 9 16 13 2 8 15 14 3 7 6 5 4

数据范围及提示 Data Size & Hint

注意输出的要求:所有数字占三个位宽,左对齐,数字和数字之间一个空格间隔

1805 蛇形填数

这个我应该是会的,但是不理解a[ht][i]和a[i][ht]有什么区别(i在前面或变量在前面),跟我讲一下有什么区别应该怎么写就可以了,不需要核心代码

张恩泽在2020-05-29 17:42:48追加了内容
//#include<bits/stdc++.h>
#include<iostream>
using namespace std;
int a[5000][5000];
int main()
{
	int n;
	cin>>n;
	int ht=1,hw=n,lt=1,lw=n,t=1;
	for(int i=1;i<=n;i++)
	{
		for(int j=1;j<=n;j++)
		{
			cout<<a[i][j];
		}
	}
	while(n*n)
	{
		for(int i=ht;i<=hw;i++)
		{
			a[i][lw]=t++;
		}
		lw--;
		for(int i=lw;i>=lt;i--)
		{
			a[i][hw]=t++;
		}
		hw--;
		for(int i=hw;i>=ht;i--)
		{
			a[lt][i]=t++;
		}
		lt++;
		for(int i=lt;i<=lw;i++)
		{
			a[ht][i]=t++;
		}
		ht++;
	}
	for(int i=1;i<=n;i++)
	{
		for(int j=1;j<=n;j++)
		{
			cout<<a[i][j]<<' ';
		}
		cout<<endl;
	}
	return 0;
}

我刚刚写了一下,看看有没有错


0
已采纳
吴文光
吴文光
新手光能
新手光能

通过规律地改变行、列下标的值,可以实现以不同的顺序遍历矩阵,比如对于一个m行n列的矩阵,可以先遍历列,然后对于每一列,可以倒着遍历行。HT和HW可以定义一个变量改变@张恩泽

0
0
我要回答