(含详细注释)实验7-2-8 找鞍点 (20分)

在这里插入图片描述

#include<stdio.h>
#include<ctype.h>
#include<string.h>
#include<math.h>
#include<stdlib.h>
int main()
{	
	int n, arr[6][6], i, j, k, flag = 1, temp = 0, max;
    scanf("%d", &n);
    for ( i = 0; i < n; i++)
        for ( j = 0; j < n; j++)
            scanf("%d", &arr[i][j]);
    for ( i = 0; i < n; i++){
        temp = 0;                   //初始化该行的第一个数为该行最大值
        for ( j = 1; j < n; j++){
            if ( arr[i][j] >= arr[i][temp])         //注意中间判断条件 >= 不然2测试点过不去,以后找最大值也可直接写上 >= 
                temp = j;
        }
        for (k = 0; k < n; k++){                //固定列数变换行数
            if (arr[i][temp] > arr[k][temp])        //这一列有一个数比这个数小则这个数不是鞍点
                flag = 0;
        }
        if (flag){                      //是鞍点则直接打印
            printf("%d %d", i, temp);
            return 0;
        }
        flag = 1;
    }
	
    printf("NONE");     //上面循环完程序还没有终止说明没有鞍点
	return 0;
} 

我刚开始将每一行的第一个元素赋值给max,然后判断该行其他元素,找最大值并把最大值的下标赋给temp发现不行,就又直接一开始就把该行最大值的列下标赋值为0就能过测试点了。有懂的老哥还请能在评论区留言,看见必回。

using System;<br>using System.Collections.Generic;<br>using System.Text;<br><br>namespace 马鞍点<br>{<br> <br> class Program<br> {<br> private static int m, n;<br> int[,] a;<br><br> public void getLine()<br> {<br> Console.WriteLine("输入你要测试的行:");<br> m = Convert.ToInt32(Console.ReadLine());<br> while (m <= 0)<br> {<br> Console.WriteLine("输入错误,请重新输入测试的行:");<br> Console.WriteLine("输入你要测试的行:");<br> m = Convert.ToInt32(Console.ReadLine());<br> }<br> Console.WriteLine("输入你要测试的列:");<br> n = Convert.ToInt32(Console.ReadLine());<br> while (n <= 0)<br> {<br> Console.WriteLine("输入错误,请重新输入测试的列:");<br> Console.WriteLine("输入你要测试的列:");<br> m = Convert.ToInt32(Console.ReadLine());<br> }<br> a = new int[m, n];<br> }<br><br> public void RunRandom(Random randObj)<br> {<br> for (int i = 0; i < m; i++)<br> {<br> for (int j = 0; j < n; j++)<br> {<br> a[i, j] = (randObj.Next())%100;<br> }<br> }<br> }<br><br> public void Random(int seed)<br> {<br> Random fixRand = new Random(seed);<br> RunRandom(fixRand);<br> }<br><br> public void getArray()<br> {<br> Console.WriteLine("输入的值为:");<br> for (int i = 0; i < m; i++)<br> {<br> for (int j = 0; j < n; j++)<br> {<br> Console.Write("a[{0},{1}] = ", i,j);<br> a[i,j] = Convert.ToInt32(Console.ReadLine());<br> }<br> Console.WriteLine();<br> }<br> }<br><br> public void displayArray()<br> {<br> Console.WriteLine("你输入的矩阵为:");<br> for (int i = 0; i < m; i++)<br> {<br> for (int j = 0; j < n; j++)<br> {<br> Console.Write(a[i,j]);<br> Console.Write("\t");<br> }<br> Console.WriteLine();<br> }<br> }<br><br> public void compare()<br> {<br> int flag = 0;<br> Console.WriteLine("马鞍点为:");<br> for (int i = 0; i < m; i++)<br> {<br> int k ,min,max,t;<br> for (int j = 0; j < n; j++)<br> {<br> min = a[i,j];<br> for (k = 0; k < n; k++)<br> {<br> if (min > a[i, k])<br> {<br> break;<br> }<br> }<br> if (k == n)<br> {<br> max = a[i, j];<br> for (t = 0; t < m; t++)<br> {<br> if (max < a[t, j])<br> {<br> break;<br> }<br> }<br> if (t == m)<br> {<br> Console.WriteLine(a[i, j]);<br> Console.WriteLine("\t");<br> flag = 1;<br> }<br> }<br> }<br> }<br> if (flag == 0)<br> {<br> Console.WriteLine("此矩阵没有马鞍点!");<br> }<br> }<br><br> public static void Main(string[] args)<br> {<br> Program p = new Program();<br> bool Flag = true;<br> while (Flag)<br> {<br> Console.WriteLine(" | 马鞍点程序 |");<br> Console.WriteLine(" |=============================================|");<br> Console.WriteLine(" | 0--------退出 |");<br> Console.WriteLine(" | 1--------随机输入 |");<br> Console.WriteLine(" | 2--------手动输入 |");<br> Console.WriteLine(" |=============================================|");<br> Console.Write("你输入的是:");<br> int num = int.Parse(Console.ReadLine());<br> switch (num)<br> {<br> case 0:<br> Flag = false;<br> break;<br> case 1:<br> p.getLine();<br> p.Random(1);<br> p.displayArray();<br> p.compare();<br> break;<br> case 2:<br> p.getLine();<br> p.getArray();<br> p.displayArray();<br> p.compare();<br> break;<br> default:<br> Console.WriteLine("输入错误,请重新输入!");<br> break;<br> }<br> Console.ReadLine();<br> }<br> }<br> }<br>}<br>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值