《考研机试》(五)机试题精讲
螺旋数组题目:
解析:每个人的想法肯定差不多都是顺时针画
1.先画1 2 3 4 (n个数)
2.再画5 6 7 (n-1个数)
3.再画8 9 10 (n-1个数)
4.再画11 12 (n-2个数)
思考一下:一共有几圈 == 应该画几次,2圈对吧,拓展一下就是(n/2+1)(不论奇偶,其实n是偶数,第三圈相当于画了个空“”)
接下来一起来写代码:
#include<iostream> using namespace std; /* * 1 2 3 4 5 * 16 6 * 15 7 * 14 8 * 13 12 11 10 9 */ int main() { int n = 5;//画一个5X5的螺旋矩阵 int count = 1;//从1开始画 int num[n][n]; //问题1:要画到哪行结束呢,是不是得要有3圈,即n/2+1 /* 第一圈: * 1 2 3 4 5 * 16 6 * 15 7 * 14 8 * 13 12 11 10 9 第二圈: 17 18 19 24 25 20 23 22 21 第三圈: 25 */ for(int i=0; i<n/2+1; i++){//画多少圈,n/2+1 for(int j=i; j<=n-i-1; j++){ //画一横:1 2 3 4 5 num[i][j] = count++; } for(int j=i+1; j<=n-i-1; j++){ //画一竖:6 7 8 9 num[j][n-i-1] = count++; } for(int j=n-i-2; j>=i; j--){ //画下面一个反横:13 12 11 10 num[n-i-1][j] = count++; } for(int j=n-i-2; j>=i+1; j--){ //画左边一个反竖:14 15 16 num[j][i] = count++; } } //打印 for(int i=0; i<n; i++){ for(int j=0; j<n; j++){ printf("%5d", num[i][j]); } printf("\n"); } return 0; }