《考研机试》(五)机试题精讲

螺旋数组题目:

 

 解析:每个人的想法肯定差不多都是顺时针画

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;
}

 

 

 

posted @ 2020-02-15 15:23  Kimishima-Kana  阅读(176)  评论(0编辑  收藏  举报