
帮忙做一道c语言题目。
对于15×15的矩阵,找出其中15个数和的最小值,这15个数来自不同的行和列,且矩阵里的数随机生成。...
对于15×15的矩阵,找出其中15个数和的最小值,这15个数来自不同的行和列,且矩阵里的数随机生成。
展开
2个回答
展开全部
#include"stdio.h"
#include"iostream.h"
#include"stdlib.h"
#define N 15
void main()
{
int juzhen[N][N];
int i,j;
for(i=0;i<N;i++)
for(j=0;j<N;j++)
juzhen[i][j]=rand();
for(i=0;i<N;i++)
{
for(j=0;j<N;j++)
cout<<juzhen[i][j]<<" ";
cout<<endl;
}
//先生成一个15*15的矩阵
int min=0,sum=0,k,l,t,m,n,max;
int count[N],same[N],compare[N];
for(i=0;i<N;i++)
{
min=juzhen[i][0];
l=0;
for(j=0;j<N;j++){
if(juzhen[i][j]<min)
{
min=juzhen[i][j];
l=j;
}
}
count[i]=l;
}
//找出每一行的最小值,并记住每一行的最小值的列数
for(i=0;i<N;i++)
cout<<count[i]<<" ";
cout<<endl;
//将每一行最小数的列数输出
for(i=0;i<N;i++)
{
t=count[i];
k=0;
for(j=0;j<N;j++)
{
if(t==count[j])
k++;
}
same[i]=k;
}
//检查每一行最小数在相同一列的次数
for(i=0;i<N;i++)
cout<<same[i]<<" ";
cout<<endl;
for(i=0;i<N;i++)
{
for(j=0;j<N;j++)
if(i==count[j]) break;
if(j==N)
compare[i]=0;
else
compare[i]=1;
}
//检查哪列有最小值哪列没有,并标记。
for(i=0;i<N;i++)
cout<<compare[i]<<" ";
cout<<endl;
for(i=0;i<N;i++)
{
if(compare[i]==0)
{
for(j=0;j<N;j++)
{
if(same[j]>1)
{
max=0;
for(k=0;k<N;k++)
{
if(count[k]==count[j])
if(max<juzhen[k][count[k]])//找出同一列中各行最小数当中最大的数字,兵把他付给没有最小数的该列。
{
max=juzhen[k][count[k]];
m=k;
}
}
}
}
count[m]=i;
}
for(n=0;n<N;n++)
{
t=count[n];
k=0;
for(j=0;j<N;j++)
{
if(t==count[j])
k++;
}
same[n]=k;
}
for(n=0;n<N;n++)
{
for(j=0;j<N;j++)
if(n==count[j]) break;
if(j==N)
compare[n]=0;
else
compare[n]=1;
}
}
for(i=0;i<N;i++)
{
cout<<"第"<<i+1<<"行 第"<<count[i]+1<<"列为"<<juzhen[i][count[i]]<<endl;
sum=sum+juzhen[i][count[i]];
}
cout<<"最终值为:"<<sum<<endl;
}
#include"iostream.h"
#include"stdlib.h"
#define N 15
void main()
{
int juzhen[N][N];
int i,j;
for(i=0;i<N;i++)
for(j=0;j<N;j++)
juzhen[i][j]=rand();
for(i=0;i<N;i++)
{
for(j=0;j<N;j++)
cout<<juzhen[i][j]<<" ";
cout<<endl;
}
//先生成一个15*15的矩阵
int min=0,sum=0,k,l,t,m,n,max;
int count[N],same[N],compare[N];
for(i=0;i<N;i++)
{
min=juzhen[i][0];
l=0;
for(j=0;j<N;j++){
if(juzhen[i][j]<min)
{
min=juzhen[i][j];
l=j;
}
}
count[i]=l;
}
//找出每一行的最小值,并记住每一行的最小值的列数
for(i=0;i<N;i++)
cout<<count[i]<<" ";
cout<<endl;
//将每一行最小数的列数输出
for(i=0;i<N;i++)
{
t=count[i];
k=0;
for(j=0;j<N;j++)
{
if(t==count[j])
k++;
}
same[i]=k;
}
//检查每一行最小数在相同一列的次数
for(i=0;i<N;i++)
cout<<same[i]<<" ";
cout<<endl;
for(i=0;i<N;i++)
{
for(j=0;j<N;j++)
if(i==count[j]) break;
if(j==N)
compare[i]=0;
else
compare[i]=1;
}
//检查哪列有最小值哪列没有,并标记。
for(i=0;i<N;i++)
cout<<compare[i]<<" ";
cout<<endl;
for(i=0;i<N;i++)
{
if(compare[i]==0)
{
for(j=0;j<N;j++)
{
if(same[j]>1)
{
max=0;
for(k=0;k<N;k++)
{
if(count[k]==count[j])
if(max<juzhen[k][count[k]])//找出同一列中各行最小数当中最大的数字,兵把他付给没有最小数的该列。
{
max=juzhen[k][count[k]];
m=k;
}
}
}
}
count[m]=i;
}
for(n=0;n<N;n++)
{
t=count[n];
k=0;
for(j=0;j<N;j++)
{
if(t==count[j])
k++;
}
same[n]=k;
}
for(n=0;n<N;n++)
{
for(j=0;j<N;j++)
if(n==count[j]) break;
if(j==N)
compare[n]=0;
else
compare[n]=1;
}
}
for(i=0;i<N;i++)
{
cout<<"第"<<i+1<<"行 第"<<count[i]+1<<"列为"<<juzhen[i][count[i]]<<endl;
sum=sum+juzhen[i][count[i]];
}
cout<<"最终值为:"<<sum<<endl;
}

2025-07-16 广告
领课题库支持单选、填空、编程题等12种题型,可随机组卷。防作弊功能包括人脸识别、IP限制,某高校用其组织10万人在线考试无故障。领课多端适配:电脑Web、安卓/iOS APP、微信小程序、H5。学员可碎片化学,数据实时同步,某网校APP端用...
点击进入详情页
本回答由领课提供
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询