1 #include <stdio.h>
2
3
4 int main(){
5 int a[4][4]={
6 {1,2,3,4},
7 {5,6,7,8},
8 {9,1,2,3},
9 {4,5,6,7}
10 };
11 int h=sizeof(a)/(sizeof(a[0]));
12 int l=sizeof(a[0])/sizeof(int);
13
14 printf("%d\n", h);
15 printf("%d\n", l);
16 for(int i=0;i<h;i++){
17 for(int k=0;k<=2*i-1;k++){
18 printf(" ");
19 }
20 for(int j=0;j<l-i;j++){
21 printf(" %d" ,a[i][j+i]);
22 }
23 printf("\n");
24
25 }
26
/*
运行结果
4
4
1 2 3 4
6 7 8
2 3
7
farsight@ub
*/
个人理解:
定义一个数组4x4的一个二维数组
5 int a[4][4]={
6 {1,2,3,4},
7 {5,6,7,8},
8 {9,1,2,3},
9 {4,5,6,7}
10 };
用于求h和列的大小
11 int h=sizeof(a)/(sizeof(a[0]));
12 int l=sizeof(a[0])/sizeof(int);
//打印输出
14 printf("%d\n", h);
15 printf("%d\n", l);
核心
我们需要去打印二维数组右倒三角的内容
首先实现打印全部二维数组的内容 就需要两个for循环 第一个循环为打印一维数组的编号
第二个for循环则是打印数组的内容
这样我们就打印出整个二维数组了
1 2 3 4
5 6 7 8
9 1 2 3
4 5 6 7
那么我们接下来只需要不打印左下角的几位数字 然后把空位补上即可
不显示这几位数字直接显示下一个数组下标的内容 只需要在输出第二套for循环中的j+i就可以了
5 ->6
9 1 ->2
4 5 6 ->7
当i=0 j=0时 i=0 (j<4-0)= 0=0-0//第一个数组打印
.
.
当i=0 j=4时 i=0 (j<4-0)= 0=0-0//第一个数组打印
当i=1 j=0时 i=0 (j<4-1)= 0=0-0//第一个数组打印
.
.
当i=1 j=4时 i=0 (j<4-1)= 0=0-0//第一个数组打印
以此类推 打印一维数组的内容会依次减去i 也就是下一个数组的内容会比上一组的内容少 1
16 for(int i=0;i<h;i++){
20 for(int j=0;j<l-i;j++){
//内容少1也达不到我们预想的结果
//在我们打印输出的时候我们只需要在输出数组内容的地方+i就可以把预想输出的结果输出了
21 printf(" %d" ,a[i][j+i]); //
22 }
23 printf("\n");
24
25 }
打印结果
1 2 3 4
6 7 8
2 3
7
最后一步只需要在输出的内容前面补空格就可以了
16 for(int i=0;i<h;i++){
//依次这样即可
//int k=0;k<=2*0-1;k++ 0
//int k=1;k<=2*1-1;k++ 1
//int k=2;k<=2*2-1;k++ 3
//int k=3;k<=2*3-1;k++ 5
//为啥我的一次循环打那么多呢
//因为printf(" %d" ,a[i][j+i]); %d前面我加了一个空格
//需要对其的话就得打这么多
17 for(int k=0;k<=2*i-1;k++){
18 printf(" ");
19 }
20 for(int j=0;j<l-i;j++){
21 printf(" %d" ,a[i][j+i]);
22 }
23 printf("\n");
24
25 }