二维数组打印右边三角

  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    }         


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

头真的要秃啦

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值