关于锯齿矩阵,咱们先来看看题目要求:
最近在参与计蒜客的实践,本题是关于链表,但小编想了好久(技术不精),还是没做出来,于是换成了自己比较习惯的结构体。
原理:
首先,我们需要记录需要插入的整数对应的行号,和这个整数,我用的是结构体。 结构体看起来更加逻辑清晰一些。
结构体如下:
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;
}
该算法是小编自己写的,如有雷同,还请见谅。(溜啦)