IOS面接アルゴリズム問題(4)——逆斜め対角線印刷マトリクス
今日は逆斜め対角線印刷マトリクスの2つをご紹介します
//
// main.c
//
//
// Created by cuixuerui on 15/12/19.
// Copyright (c) 2015 cuixuerui. All rights reserved.
//
#include <stdio.h>
/*
M N , ( ) 。(******)
0 1 2 3
4 5 6 7
8 9 10 11
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("
");
}
/*
: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("***** *****
");
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("
");//
num++;
}
///////////////// ( )////////////////
// ,
printf("***** ( )*****
");
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("
");
}
}