IOS面试算法题(4)——反斜对角线打印矩阵

来源:互联网 发布:淘宝评价过期有信誉 编辑:程序博客网 时间:2024/05/22 05:12

今天给大家介绍两种反斜对角线打印矩阵方式


////  main.c//  反向斜对角线打印////  Created by cuixuerui on 15/12/19.//  Copyright (c) 2015年 cuixuerui. All rights reserved.//#include <stdio.h>/* 一个M行N列的数组,要求反向斜对角线(右上左下)的方式打印该数组。(******)  0123 4567 891011  打印顺序是 0 1 4 2 5 8 3 6 9 7 10 11  */int main(int argc, const char * argv[]) {        int m,n;    scanf("%d%d",&m,&n);    int a[m][n];    int count=0;    for (int i=0; i<m; i++) {        for (int j=0; j<n; j++) {            a[i][j]=count++;            printf("%d ",a[i][j]);        }        printf("\n");    }        /*     第一层:a[0][0].................... i+j=0     第二层:a[0][1] a[1][0]............ i+j=1     第三层:a[0][2] a[1][1] a[2][0].... i+j=2     第四层:a[0][3] a[1][2] a[2][1].... i+j=3     第五层:a[1][3] a[2][2]............ i+j=4     第六层:a[2][3].................... i+j=5          */    int num=0;        /////////////////优化后的算法////////////////        printf("*****优化后的算法*****\n");    int low=0;   //i的下限    while (num<(m+n-1)) {//i+j=5,3*4的数组循环6次                if(num>=n){ //打印下半部分的时候i的下标开始+1            low++;        }        for (int i=low;i<m; i++) {            printf("%d ",a[i][num-i]);            if (num==i) { //列的下标等于0的时候,跳出。                break;            }        }        printf("\n");//加一个换行可以看得更加明了        num++;    }    /////////////////介绍一种暴力破解办法(穷举法)////////////////    //简单粗暴,超级好理解        printf("*****暴力破解办法(穷举法)*****\n");    int k=0;    while (k<(m+n-1)) {        for (int i=0; i<m; i++) {            for (int j=0; j<n; j++) {                if (i+j==k) {                    printf("%d ",a[i][j]);                }            }        }        k++;        printf("\n");    }    }


1 0