• 笔试题&面试题:CW输出矩阵


    称号:CW输出矩阵(N*N)。

    如果一个矩阵:

     1   2   3   4

     5   6   7   8

     9  10 11 12

    13 14 15 16

    那么程序应该给出的输出为:1 2 3 4 8 12 16 15 14 13 9 5 6 7 11 10

    这个问题在网上也搜集了一下答案,没有什么巧妙的办法,所以以下给出的是全然依照顺时针走向输出的一个代码(自己亲手编写,測试通过):

    #include <stdio.h>
    #define N	5 //矩阵的维度
    
    void clockwise_matrix(int matrix[][N])
    {
    	int starta = 0, startc = 0, enda = N-1, endc = N-1;
    	int array, column, i;
    	
    	while(1) {
    		for(i = 0; startc+i <= endc; i++) { //横向递增
    			printf("%3d ", matrix[starta][startc+i]);
    		}
    		if(starta < enda) { //这个推断是为了使矩阵剩余的部分仅仅剩下一行的时候的特殊情况处理
    			for(i = 1; starta+i <= enda; i++) { //竖向递增
    				printf("%3d ", matrix[starta+i][endc]);
    			}
    			for(i = 1; endc-i >= startc; i++) { //横向递减
    				printf("%3d ", matrix[enda][endc-i]);
    			}
    			for(i = 1; enda-i > starta; i++) { //竖向递减
    				printf("%3d ", matrix[enda-i][startc]);
    			}
    		}
    		
    		starta ++;
    		startc ++;
    		enda --;
    		endc --;
    		if(starta > enda) {
    			break;
    		} 
    	}
    }
    
    int main()
    {
    	int i, j;
    	int matrix[N][N];
    	
    	for(i = 0; i < N; i++) //给測试数组赋值
    		for(j = 0; j < N; j++) {
    			matrix[i][j] = i*N + j;
    		}
    		
    	printf("The test matrix is :
    "); //打印出測试数组
    	for(i = 0; i < N; i++) {
    		for(j = 0; j < N; j++) {
    			printf("%3d ", matrix[i][j]);
    		}
    		printf("
    ");
    	}
    	printf("
    ");
    	clockwise_matrix(matrix);
    	printf("
    ");
    	return 0;
    }
    


     

    以下是程序在ubuntu下执行的结果(程序中的维度能够改动。自己測试过1~7没有问题):


    版权声明:本文博客原创文章。博客,未经同意,不得转载。

  • 相关阅读:
    Codeforces Beta Round #9 (Div. 2 Only) C. Hexadecimal's Numbers dfs
    Codeforces Beta Round #9 (Div. 2 Only) B. Running Student 水题
    Codeforces Beta Round #9 (Div. 2 Only) A. Die Roll 水题
    51nod 1035 最长的循环节 数学
    BSGS 模板
    51nod 1040 最大公约数之和 欧拉函数
    51NOD 1179 最大的最大公约数 筛法
    BZOJ 2818: Gcd 筛法
    川大校赛总结
    SCOJ 4484 The Graver Robbers' Chronicles 后缀自动机
  • 原文地址:https://www.cnblogs.com/mengfanrong/p/4638037.html
Copyright © 2020-2023  润新知