c语言鞍点问题
求求大佬救救孩子,寻找鞍点问题,意思是一个二维数组中,如果一个数在其所在行中最大,但在其所在列最小,则为鞍点。要求输出该数,以及其所在的行、列,最难的要求是重复也算,例如: 1 2 2
1 3 3
1 4 4
输出要求为: 2 第一行第二列
2 第一行第三列
下面是我的代码,无法解决重复问题,求大佬救救孩子
#include<stdio.h>
//寻找鞍点,以3*3数组为例
#define M 3
#define N 3
int main()
{
int a; //初始二维数组
int i,j,k; //循环计数
int m,temp; //筛选中间量
printf("输入数组数值(%d个):\n",M*N);
for(i=0;i<M;++i)
for(j=0;j<N;++j)
scanf("%d",&a);
//校检输入是否符合预期
printf("校检如下:\n");
for(i=0;i<M;++i)
{
printf("第%d行:",i+1);
for(j=0;j<N;++j)
{
printf("%d",a);
}
printf("\n");
}
//筛选鞍点
for(i=0;i<M;i++) //每行
{
m = a;
for(j=0;j<N;++j)
{
if(a>m)
{
m = a;
temp = j;
}
}
for(k=0;k<M;++k)
{
if(m>a)
{
printf("第%d行无鞍点\n",i);
break;
}
}
if(k==M)
{
printf("鞍点: %d 第%d行,第%d列\n",m,i+1,temp+1);
}
}
return 0;
} 此题目是谭浩强《C语言程序设计》的课后习题。下面的程序,是我学习时写的,本不想翻旧帐,两天了,没有人回答你,程序还是给你吧(你要的是 3 x 3 ,将定义中的 M、N 改为 3 即可):
#include <stdio.h>
#define M 10 //最大接收M行N列的数组,这里是10*10,可修改。
#define N 10
int main()
{
int a, b;
int i, j, k, s, max, min, count = 0;
//下面用来接收数组的输入
printf("输入数组元素:");
for (i = 0;i < M;i++) // 输入数组
{
for (j = 0;j < N;j++)
{
scanf("%d", &a);
}
}
// 打印数组
for (i = 0;i < M;i++)
{
for (j = 0;j < N;j++)
{
printf("%5d", a);
}
printf("\n");
}
//查找判断鞍点
for (j = 0;j < M;j++)
{
max = a;
for (i = 0;i < N;i++) // 找第j行最大值
if (a > max)
max = a;
s = 0;
for (i = 0;i < N;i++) //将最大值所在的列存入数组b中
if (a = max)
{
b = i;
s++; //s的值就是最大值的个数
}
min = max;
for (i = 0;i < s;i++) //有几个最大值循环判断几次
{
for (k = 0;k < M;k++)//判断这个行最大值是不是列最小
if (min > a])
break;
if (k == M) //输出,count为鞍点个数
printf("鞍点为第%d行第%d列的%d\n", j + 1, b + 1, a]);
count++;
}
}
} 风过无痕1989 发表于 2020-11-24 10:47
此题目是谭浩强《C语言程序设计》的课后习题。下面的程序,是我学习时写的,本不想翻旧帐,两天了,没有人 ...
谢谢您 风雨兴 发表于 2020-11-25 19:31
谢谢您
不客气
页:
[1]