|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
求一个5×5矩阵中的马鞍数,输出它的位置。马鞍数是指在行上最小但在列上最大的数
示例输入
5 6 7 8 9
4 5 6 7 8
3 4 5 2 1
2 3 4 9 0
1 2 5 4 8
示例输出
[0,0]
给出代码:
blank = []
for i in range(5):
a = input()
b = [int(i) for i in a.split(' ')]
blank.append(b)
blank2 = []
for line in blank:
for each in line:
if each == min(line):
blank2.append([blank.index(line),line.index(each)])
for i in range(5):
if blank[(blank2[i][0])][(blank2[i][1])] == max([blank[k][blank2[i][1]] for k in range(5)]):
print(blank2[i])
发现错误,求正确代码和指出错误原因
晕,你要的是马鞍数,不是鞍点。下面的程序是求马鞍数的:
- #include <stdio.h>
- #define M 5 //最大接收M行N列的数组,这里是10*10,可修改。
- #define N 5
- int main()
- {
- int a[M][N], b[N];
- int i, j, k, n, s = 0, max, min, count = 0;
- printf("输入数组元素:");
- for (i = 0;i < M;i++) // 输入数组
- {
- for (j = 0;j < N;j++)
- {
- scanf("%d", &a[i][j]);
- }
- }
- // 打印数组
- for (i = 0;i < M;i++)
- {
- for (j = 0;j < N;j++)
- {
- printf("%3d", a[i][j]);
- }
- printf("\n");
- }
- //查找判断马鞍数
- for (i = 0;i < M;i++)
- {
- min = a[i][0]; // 将每行的第一个元素设为最小值
- for (j = 0;j < N;j++) // 找第i行最小值
- {
- if (a[i][j] < min)
- {
- min = a[i][j];
- }
- }
- s = 0; //s的值就是最小值的个数
- for (j = 0;j < N;j++) //将最小值所在的列存入数组b[s]中
- {
- if (a[i][j] == min)
- {
- b[s] = j;
- s++;
- }
- }
- max = min;
- for (n = 0;n < s;n++) //有几个最小值循环判断几次
- {
- for (k = 0;k < M;k++) //判断这个行最小值是不是列最大
- {
- if (a[k][b[n]] > max)
- {
- break;
- }
- }
- if (k == M) //输出,count为马鞍点个数
- printf("马鞍数为第%d行第%d列的%d\n", i + 1, b[n] + 1, a[i][b[n]]);
- count++;
- }
- }
- if(count == 0)
- printf("该二维数组没有马鞍数\n");
- }
复制代码
|
|