对称矩阵:
当i>=j 时 a[i][j]的地址=a[0][0]的地址+((1+2+...i)*i+j)*L;
即 address(a[i][j])=address(a[0][0])+(1+i)×i/2+j;
当i<j 时 address(a[i][j])=address(a[0][0]+(1+j)*j/2+i;
#include<iostream>
#include<cstdio>
#include<cstdlib>
using namespace std;
int *memory(int n)
{
int len =(1+n)*n/2;
int *base =(int *)malloc(len*sizeof(int));
for(int i=0;i<len;i++)
*(base+i)=i;
return base;
}
void Print(int *base,int n)
{
int i,len;
len=(1+n)*n/2;
for(int i=0;i<n;i++)
{
for(int j =0;j<n;j++)
{
if(i>=j) printf( "%-3d",*(base+(1+i)*i/2+j));
else printf("%-3d", *(base+(1+j)*j/2+i));
}
cout<<endl;
}
cout<<endl;
}
void value(int *base,int i,int j,int *x,int n)
{
if(i<0||i>=n||j<0||j>=n)
{
cout