回型矩阵
回型矩阵
https://ac.nowcoder.com/acm/problem/22230
题目描述
给你一个整数n,按要求输出n∗n的回型矩阵输入描述:
输入一行,包含一个整数n (1<=n<=19)输出描述:
输出n行,每行包含n个正整数示例1
输入:4
输出:
1 2 3 4
12 13 14 5
11 16 15 6
10 9 8 7解题思路:
主要考察的就是对于边界情况的判断,需要建立 n * n 的矩阵 arr 存储值,并且声明一个变量 k ,随着循环自增,每次循环的 k 值存储在 arr 内,最后再将 arr 数组按行打印即可。 while 循环的终止条件即为 k > n * n,并且要注意四个 for 循环中,必须有两个 for 循环(分别为左右循环和上下循环)的终止条件取等号,目的是确保能够到达循环终止前最后一个会使边界重叠的位置。C# 代码:
using System; class Program{ static void Main(){ string input; while((input = Console.ReadLine()) != null){ int n = int.Parse(input); int[][] arr = new int[n][]; for(int i = 0; i < n; i++) arr[i] = new int[n]; int k = 1; int up = 0, down = n-1, left = 0, right = n-1; while (k <= n * n){ for (int i = left; i < right; i++) arr[up][i] = k++; for (int i = up; i <= down; i++) arr[i][right] = k++; for (int i = right-1; i >= left; i--) arr[down][i] = k++; for (int i = down-1; i > up; i--) arr[i][left] = k++; up++; left++; down--; right--; } for(int i = 0; i < n; i++){ for(int j = 0; j < n; j++) Console.Write(arr[i][j] + " "); Console.WriteLine(); } } } }