《考研机试》(五)机试题精讲
螺旋数组题目:

解析:每个人的想法肯定差不多都是顺时针画
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;
}

浙公网安备 33010602011771号