我需要一些C编程方面的帮助。 我需要找到矩阵D =(A + B)* C,然后找到该矩阵中的最大元素并创建一个新元素,其中没有放置此元素的行和列。 所以,我找到了这个矩阵,但我不知道如何找到max元素以及如何切割矩阵。我希望有人可以帮助我。
file.txt的
4
1 0 -10 1
0 1 0 1
1 0 1 1
3 4 6 7
1 1 0 8
0 1 -10 3
0 1 1 1
1 5 8 5
11 -19 0 8
-10 1 10 3
0 10 12 1
1 2 -32 4
编码本身。
#include<stdio.h>
#include <math.h>
int main()
{
int n,i,j,k=0;
int t=0;
int m[300],a[10][10],b[10][10],c[10][10];
int d1[10][10],d[10][10];
FILE *f;
f=fopen("file.txt","r");
if(f!=NULL)
{
fscanf(f,"%d",&n);
for(i=0; i<(n-1)*n*n;i++)
fscanf(f,"%d",&m[i]);
}
for(i=0; i<n;i++)
for(j=0; j<n;j++)
{
a[i][j]=m[k]; //Matrix A
k++;
}
for(i=0; i<n;i++)
for(j=0; j<n;j++)
{
b[i][j]=m[k]; //Matrix b
k++;
}
for(i=0; i<n;i++)
for(j=0; j<n;j++)
{
c[i][j]=m[k]; //Matrix C
k++;
}
printf("A+B=\n\n");
for(i=0; i<n;i++)
{
for(j=0; j<n;j++)
{
d1[i][j]=a[i][j]+b[i][j]; //Matrix (A+B)
printf("%d ",d1[i][j]);
}
printf("\n");
}
printf("\nD=(A+B)*C\n\n");
for(i=0; i<n;i++)
{
for(j=0; j<n;j++)
{
d[i][j]=0;
for(t=0; t<n;t++)
d[i][j]=d[i][j]+d1[i][t]*c[t][j]; //Matrix D
printf("%d ",d[i][j]);
}
printf("\n");
}
fclose(f);
}
输出:
A+B=
2 1 -10 9
0 2 -10 4
1 1 2 2
4 9 14 12
D=(A+B)*C
21 -119 -398 45
-16 -90 -228 12
3 6 -30 21
-34 97 -126 121
答案 0 :(得分:0)
样本
#include <stdio.h>
#include <stdlib.h>
void *max_cut(int size, int mat[size][size], int n){
//size : real size, n : used size
int new_n = n - 1;//n > 1
int (*result)[new_n] = malloc(new_n*sizeof(*result));
int nr, nc;
int r, c, max_r=0, max_c=0;
for(r=0; r<n ;++r){
for(c=0; c<n; ++c){
if(mat[r][c] > mat[max_r][max_c]){//It is not updated when there is same value.
max_r = r;
max_c = c;
}
}
}
for(nr=r=0; r<n; ++r){
if(max_r == r)
continue;//skip
for(nc=c=0; c<n; ++c){
if(max_c == c)
continue;//skip
result[nr][nc++] = mat[r][c];
}
++nr;
}
return result;
}
int main(void){
int mat[10][10] = {
{ 21,-119,-398, 45},
{-16, -90,-228, 12},
{ 3, 6, -31, 21},
{-34, 97,-126,121}
};
int n = 4;
int (*result)[n-1] = max_cut(10, mat, n);
int r, c;
n -= 1;
for(r=0; r<n; ++r){
for(c=0; c<n; ++c)
printf("%5d", result[r][c]);
printf("\n");
}
free(result);
return 0;
}