题目描述
给你一个整数n,输出n∗n的蛇形矩阵。输入描述:
输入一行,包含一个整数n输出描述:
输出n行,每行包含n个正整数,通过空格分隔。1<=n<=1000示例1
输入:4
输出:
1 2 6 7
3 5 8 13
4 9 12 14
10 11 15 16解题思路:
与回型矩阵 类似,都是需要先创建数组进行处理,然后再逐行输出数组内容。而本题的处理方式比回型矩阵 复杂一点。但还是有规律可循。所谓蛇形,从示例中可以看出,就是数组中数字的递增方式像蜿蜒爬行的蛇一样。从1开始,蜿蜒到16,并且如下图所示,如果以右斜向上来看,红色划线的数字在所在的红线上右斜向上递增,而从左斜向下看,绿色划线的数字所在的绿线上左斜向下递增,并且细看还发现,红线所在的斜列长度是奇数,而绿线所在的斜列是偶数,因此再集中分析边界条件可得到相应的代码。
- 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 p = 0; p < n; p++) arr[p] = new int[n]; bool decrease = false; int i = 0, j = 0, k = 1, len = 1; while(k <= n*n){ for(int l = 0; l < len; l++){ arr[i][j] = k++; if(len%2 == 1){ if(j < n-1){ i = i > 0 ? i-1 : i; j++; } else i++; } else{ if(i < n-1){ j = j > 0 ? j-1 : j; i++; } else j++; } } if(len == n) decrease = true; if(decrease) len--; else len++; } for(int p = 0; p < n; p++){ for(int q = 0; q < n; q++) Console.Write(arr[p][q] + " "); Console.WriteLine(); } } } }