输出原来的矩阵;输出压缩后的一维数组;根据输入的行号列号,从压缩矩阵中计算出元素的值
#include<stdio.h>
int main(){
inta[5][5]={ //定义原二维数组
1,0, 0, 0, 0,
5,9, 0, 0, 0,
4,6, 8, 0, 0,
2,3, 44,55,0,
7,11,12,13,14
};
intb[30],x,y,k;
printf("原二维数组:\n"); //输出原二维数组
for(x=0;x<5;x++)
{
for(y=0;y<5;y++)
{
printf("%d",a[x][y]);
}
printf("\n");
}
printf("压缩后的一维数组:\n");
intt=0;
for(int i=0;i<5;i++) //将二维数组中非0值压缩至一维数组中
{
for(intj=0;j<5;j++)
{
if(i>=j) //特殊矩阵,只压下三角的值
{
k=i*(i+1)/2+j; //二维数组和一维数组中原值的对应关系
b[k]=a[i][j];
t++;
}
else
b[15]=0;
}
}
for(intl=0;l<t;l++) //输出一维数组
{
printf("%d",b[l]);
}
printf("\n");
printf("输入要查询的行号 列号:"); //输出要查询的数据
printf("\n");
scanf("%d%d",&x,&y);
printf("您查询的数据是:\n");
if(x<y) //如果上三角直接输出0
printf("0\n");
else //下三角输出一维数组中对应的值
printf("%d\n",b[(x-1)*(x)/2+y-1]);
return0;
}