(C语言)打印锯齿矩阵

关于锯齿矩阵,咱们先来看看题目要求:
图源自计蒜客
最近在参与计蒜客的实践,本题是关于链表,但小编想了好久(技术不精),还是没做出来,于是换成了自己比较习惯的结构体。

原理:

首先,我们需要记录需要插入的整数对应的行号,和这个整数,我用的是结构体。 结构体看起来更加逻辑清晰一些。

结构体如下:

struct line{
    int id;
    int data;
};

(id 表示该整数对应的行号,data 表示该整数)

然后我们需要做的是,将 m 对数据存入到结构体里面。

因为我们得知了行数 n ,所以可以利用双层循环来判断之前存入的数据分别属于哪一行,并存入到一个数组 b[]里面,内层循环结束后,输出数组 b[]中的所有数据,然后将数组 b[] 清空(即初始化)

这一步需要使用一个函数 memset(),不会用的小伙伴可以搜索一下相关知识。

memset(b,0,sizeof(b));

就这样,大概的解题思路就完成了,上代码!!!

代码如下:

#include<stdio.h>
#include<string.h>
struct line{
    int id;
    int data;
};
int main(){
    int n,m,sum=0,b[10002];//为了防止溢出,这里多开了两个单元
    scanf("%d%d",&n,&m);
    struct line a[m];
    memset(b,0,sizeof(b));//初始化数组
    for(int i=0;i<m;i++){
        scanf("%d%d",&a[i].id,&a[i].data);
    }
    for(int i=1;i<=n;i++){  //外层循环是行号
        for(int j=0;j<m;j++){
            if(a[j].id==i){ //判断此时的数据的id是否等于i
                b[sum++]=a[j].data;
            }
        }
        if(sum>0){
            for(int k=0;k<sum;k++){
                printf("%d ",b[k]);
            }
        }
        printf("\n");
        memset(b,0,sizeof(b));//再次初始化
        sum=0;//sum记录数组b的下标,每次内循环结束需要重置为0
    }
    return 0;
}

该算法是小编自己写的,如有雷同,还请见谅。(溜啦)

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值