2 D対称マトリクスのC言語実装

970 ワード

#include
#include
#include
void assign(int a[],int i,int j,int e){
    if(i>=j)
        a[i*(i-1)/2+j-1]=e;
    else
        a[j*(j-1)/2+i-1]=e;
}
int value(int a[],int i,int j){
    if(i>=j)
        return i*(i-1)/2+j-1;
    else
        return j*(j-1)/2+i-1;
}
int main(){
    int *array=0,i,j;
    int N,s,n,k;
    printf("         :
"); scanf("%d",&N); array=(int*)malloc(sizeof(int)*(N*(N+1)/2)); printf(" (%d ):
",N*(N+1)/2); for(i=1;i<=N;i++) for(j=1;j<=i;j++) { scanf("%d",&n); assign(array,i,j,n); } for(i=1;i<=N;i++){ for(j=1;j<=N;j++){ k=value(array,i,j); printf("%3d ",array[k]); } printf("
"); } free(array); system("pause"); return 0; }