#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main(void)
{
	 int *test[4],i,j,*buttom,*top;
	 char temp;
	 buttom=(int*)malloc(4*4*(4+1)/2);
	 top=(int*)malloc(4*(4+1)/2*4);
	 if(buttom==NULL||top==NULL)
	 return -1;
	 for(i=0;i<4;i++)
	 {
	 	test[i]=(int*)malloc(4*4);
	 	if(!test[i])
	 	{
	 		return -1;
		}
	 } 
	 for(i=0;i<4;i++)
	 {
	 	for(j=0;j<4;j++)
		 {
		 	scanf_s("%d",test[i]+j);
		 	temp=getchar();
		 }	
	 }
	 printf("________________________________________________\n");
	 printf("您输入的为:\n");
	 for(i=0;i<4;i++)
	 {
	 	for(j=0;j<4;j++)
	 	{
	 		printf("%d ",*(test[i]+j));
		 }
		 printf("\n");
	 }
	//
	//验证知识点:一维数组下标求法:
	 for(i=0;i<4;i++)
	 {
	 	for(j=0;j<4;j++)
	 	{
	 	buttom[(i*(i+1)/2)+j]=*(test[i]+j);
		 top[i*(i+1)/2+j]=*(test[j]+i);
            if(i==j)
            break;
		}
	 }
	 
	 //下三角元素为:
	 printf("下三角元素为:\n"); 
	 for(i=0;i<10;i++)
	 {
	 	printf("%d ",buttom[i]);
	 }
	//上三角元素为;
	printf("\n上三角元素为:\n");
	for(i=0;i<10;i++)
	{
		printf("%d ",top[i]);
	}
	for(i=0;i<10;i++)
	{
	if(buttom[i]!=top[i])
	break;	
	} 
	if(i>=10)
	{
		printf("\n这是一个对称矩阵\n"); 
		for(i=0;i<4;i++)
		{
		printf("正在删除test[%d]\n",i);
		free(test[i]);
		printf("删除test[%d]成功\n",i);
	      }
	      printf("系统将为您保存下三角buttom[]数组\n");
	      printf("正在删除上三角top[]\n");
	      free(top);
	      printf("删除上三角top[]成功\n");
	}
	else
	{
		printf("\n这不是一个对称矩阵\n"); 
	}
	
	
	
	return 0;
}