一看到这个题首先想到的就是用二维数组,但是malloc一个二维数组的题我还没做过,于是就尝试着找规律用算法实现。先上一个我的源代码吧(参考性不强,可以直接跳过)
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<math.h>
#include<stdbool.h>
void hanshu(int n,int* a,int i)
{
int tmp;
for (tmp=0;tmp<i;tmp++)
{
printf("%d",a[tmp]);
if(tmp<i-1)
{
printf(" ");//学校的OJ对表达结果的审核真的屑
}
}
}int main()
{
int n,i,j=0;
int *a;
scanf("%d",&n);
a=malloc(sizeof(int)*n*n);
//输入初始化
for(i=0;i<n*n;i++)
{
scanf("%d",&a[i]);
}
//传入每个数组
for(i=1;i<=n;i++)
{
hanshu(n,&a[(i-1)*n],i);
if(i<n)
{
printf("\n");
}
}return 0;
}
重点来了:malloc一个二维数组其实本质上就是先malloc一个数据类型为int*的数组,再malloc这个数组里的每一个成员
听起来可能有点绕不太好理解,直接上代码
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<math.h>
#include<stdbool.h>
int main()
{
int n,i,j=0;
int **a;
scanf("%d",&n);
a=(int**)malloc(sizeof(int*)*n);//malloc一个数据类型为int*的数组
for(i=0;i<n;i++)
{
a[i]=(int*)malloc(sizeof(int)*n); //再malloc这个数组里的每一个成员
}
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
scanf("%d",&a[i][j]);
}
}
//接下来就只要输出就行啦
for(i=0;i<n;i++)
{
for (j=0;j<=i;j++)
{
printf("%d",a[i][j]);
if(j!=i)
{
printf(" ");
}
}
if(i!=n-1)
{
printf("\n");
}
}return 0;
}