题目 ,马鞍山数是指在一个矩阵中,这个数在所在行中最大,在所在列中最小
首先根据题目的要求我们构造以下的函数,这几个都是我们下面需要用到的函数
void creat_data(int data[][20],int x,int y); //创建一个矩阵,
void printf_data(int data[][20],int x,int y); //输出矩阵
int fin_x(int data_x[20],int data[][20],int x,int y); //找出矩阵每行最大元素下标
void printf_x(int data_x[20],int x); //输出每行下标 便于肉眼观察 核对结果
void fin_m_a_s(int data_x[20],int data[][20],int x,int y); //找出马鞍上数字
(1):创建一个矩阵
void creat_data(int data[][20],int x,int y)
{
int j,k;
for(j=0;j<x;j++)
{
for(k=0;k<y;k++)
{
data[j][k]=rand() % (99-1+1)+1;
}
}
}
(2):输出矩阵
void printf_data(int data[][20],int x,int y)
{
int j,k;
for(j=0;j<x;j++)
{
for(k=0;k<y;k++)
{
printf("%-3d",data[j][k]);
}
printf("\n");
}
}
3:找出最小的x坐标
int fin_x(int data_x[20],int data[][20],int x,int y)
{
int j,k,max;
for(j=0;j<x;j++)
{
max=data[j][0];
for(k=0;k<y;k++)
{
if(max<data[j][k])
{
max=data[j][k];
data_x[j]=k;
}
}
}
return j;
}
4:找出马鞍山数
void fin_m_a_s(int data_x[20],int data[][20],int x,int y)
{
int min,j,k;
for(j=0;j<x;j++)
{
min=data[j][data_x[j]];
for(k=0;k<x;k++)
{
if(min>data[k][data_x[j]])
{
min=data[k][data_x[j]];
break;
}
}
if(data[j][data_x[j]] != min)
{
printf("第%d行马鞍山数为:NULL\n",j);
}
else
{
printf("第%d行马鞍山数为: %d\n",j,min);
}
}
}
6:马鞍山数调用
void main()
{
int x,y;
int data[20][20]={0},data_x[20]={0},data_m_a_s[20]={0};
srand(time(NULL));
printf("input X:\n");
scanf("%d",&x);
printf("input Y:\n");
scanf("%d",&y);
creat_data(data,x,y);
printf("printf data:\n");
printf_data(data,x,y);
fin_x(data_x,data,x,y);
printf("printf_x_data\n");
printf_x(data_x,x);
printf("end_data_end\n");
fin_m_a_s(data_x,data,x,y);
}