zoukankan      html  css  js  c++  java
  • 笔试题&面试题: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没有问题):


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

  • 相关阅读:
    yum安装mysql5.7和8.0版本
    centos7永久修改主机名
    centos7 安装 oracle jdk(非open-jdk)
    yum安装Nginx
    该文件没有与之关联的程序来执行该操作。请安装应用,若已经安装应用,请在"默认应用设置
    java 通过url地址 获取视频时长
    获取视频属性工具类
    redis看门狗
    mysql中group_concat函数的使用
    mybatis-config.xml配置
  • 原文地址:https://www.cnblogs.com/mengfanrong/p/4638037.html
Copyright © 2011-2022 走看看