#include <stdio.h>
#include <stdlib.h>
int **Get2DArray(int row,int col){
int **a,l;
a=(int **)calloc(row,sizeof(int *));
for(l=0;l<col;l++)
a[l]=(int *)calloc(col,sizeof(int));
return a;
}
int yasuo(int *o,int **a,int n){
int i,j;
for(i=0;i<n;i++)
for(j=0;j<n;j++){
if(i>=j)
a[i][j]=o[i*(i+1)/2+j];
else
a[i][j]=o[j*(j+1)/2+i];
}
}
int **multiple(int *o,int *p,int **c,int n){
int i,j,k,l,d,s;
c=Get2DArray(n,n);
for(i=0; i<n; i++)
{
for(j=0; j<n; j++)
{
for(k=0; k<n; k++)
{
if(i>=k)
l=(i+1)*i/2+k;
if(i<k)
l=(k+1)*k/2+i;
if(j>=k)
d=(j+1)*j/2+k;
if(j<k)
d=(k+1)*k/2+j;
s+=o[l]*p[d];
}
c[i][j]=s;
s=0;
}
}
return c;
}
/* run this program using the console pauser or add your own getch, system("pause") or input loop */
int main(int argc, char *argv[]) {
int *o,*p,**a,**b,**c,n,i,k,j,l;
printf("請輸入階數n:\n");
scanf("%d",&n);
a=Get2DArray(n,n);
b=Get2DArray(n,n);
c=Get2DArray(n,n);
k=(1+n)*n/2;
o=(int *)malloc(sizeof(int )*k);
p=(int *)malloc(sizeof(int )*k);
printf("生成矩陣A請輸入%d個壓縮矩陣中的數:\n",k);
for(l=0;i<k;i++)
scanf("%d",&o[l]);
yasuo(o,a,n);
printf("矩陣A為:\n");
for(i=0;i<n;i++)
for(j=0;j<n;j++){
printf("%d ",a[i][j]);
if(j==n-1)
printf("\n");
}
printf("生成矩陣B請輸入%d個壓縮矩陣中的數:\n",k);
for(l=0;i<k;i++)
scanf("%d",&o[i]);
yasuo(p,b,n);
printf("矩陣B為:\n");
for(i=0;i<n;i++)
for(j=0;j<n;j++){
printf("%d ",b[i][j]);
if(j==n-1)
printf("\n");
}
c=multiple(o,p,c,n);
printf("矩陣C為:\n");
for(i=0; i<n; i++)
for(j=0; j<n; j++){
printf("%5d ",c[i][j]);
if(j==n-1)
printf("\n");}
return 0;
}
運行得出

想要效果

想知道為什么會這樣
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/218879.html
標籤:C++ 語言
上一篇:Codeup 100000609 BFS問題,有關記憶體超限的請教
下一篇:7-5 畫圓的游戲 (15分)
