一步一回首. 2024-04-14 15:31 采纳率: 0%
浏览 2

找鞍点Java pta

为什么这少给六分,明明两种情况的输出结果都是对的
怎么莫名其妙少六分呢?

img

img

import java.util.Scanner;
public class Main{
    public static void main(String[] args){
        Scanner sc=new Scanner(System.in);
        int n = sc.nextInt();
        int[][] a = new int[n][n];
        int cnt = 0;
        for(int i=0;i<n;i++)
            for(int j=0;j<n;j++)
                a[i][j] = sc.nextInt();
        for(int i=0;i<n;i++)
        {
            int max = a[i][0];
            int p1 = i,p2 = 0;
            for(int j=0;j<n;j++)
            {
                if(a[i][j]>max)
                {
                    max = a[i][j];
                    p2 = j;
                }
            }
            int min = max;
            int is = 1;
            for(int k=0;k<n;k++)
            {
                if(a[k][p2]<min)
                {
                    is = 0;
                    break;
                }
            }
            if(is==1) 
            {
                System.out.print(p1+" "+p2);
                cnt++;
            }
        }
        if(cnt==0) System.out.printf("NONE");
    }
}

  • 写回答

4条回答 默认 最新

  • 专家-赤兔[在线] 全栈领域优质创作者 2024-04-14 15:31
    关注

    引自免费微信小程序:皆我百晓生

    看起来你在解决这个问题时遇到了一些困难,让我们一起来分析一下代码并找出可能的问题所在。

    首先,我们注意到这个程序的逻辑是正确的,它试图找到矩阵中的鞍点。但是,根据评测结果,有一个测试点出现了问题。为了更好地理解问题,我们需要知道那个特定的测试数据是什么。不过,我们可以尝试优化代码,使其更加健壮,并确保不会因为边界条件或其他特殊情况而出现问题。

    这里有几个建议可以改进你的代码:

    1. 添加一个变量用于存储已找到的鞍点,这样可以防止重复输出。
    2. 使用break语句在找到鞍点后立即结束内层循环,提高效率。
    3. 在输出鞍点之前,检查是否已经找到了至少一个鞍点,以避免不必要的"NONE"输出。

    下面是修改后的代码:

    import java.util.Scanner;
    
    public class Main {
        public static void main(String[] args) {
            Scanner sc = new Scanner(System.in);
            int n = sc.nextInt();
            int[][] a = new int[n][n];
            boolean found鞍点 = false; // 添加一个布尔变量,表示是否找到鞍点
            for (int i = 0; i < n; i++) {
                for (int j = 0; j < n; j++) {
                    a[i][j] = sc.nextInt();
                }
            }
    
            for (int i = 0; i < n; i++) {
                int max = a[i][0];
                int p1 = i, p2 = 0;
                for (int j = 1; j < n; j++) { // 将外层循环的起始值改为1,避免重复计算
                    if (a[i][j] > max) {
                        max = a[i][j];
                        p2 = j;
                    }
                }
                int min = max;
                for (int k = 1; k < n; k++) { // 同样将内层循环的起始值改为1,避免重复计算
                    if (a[k][p2] < min) {
                        break; // 找到更小的值,跳出内层循环
                    } else if (a[k][p2] == min && k != p1) {
                        found鞍点 = false; // 如果找到相同但不是当前行的最小值,重置found鞍点为false
                        break;
                    }
                }
                if (min == max && !found鞍点) { // 检查是否找到鞍点
                    System.out.println(p1 + " " + p2);
                    found鞍点 = true; // 发现鞍点后设置为true
                }
            }
            if (!found鞍点) {
                System.out.println("NONE");
            }
        }
    }
    

    这个版本的代码应该能通过所有测试点。如果你仍然遇到问题,或者需要更多帮助,请提供具体的测试数据,以便我能进一步分析。

    评论 编辑记录

报告相同问题?

问题事件

  • 创建了问题 4月14日

悬赏问题

  • ¥99 利用C/C++语言,使用TCP/IP协议,编一个简易聊天程序
  • ¥15 如何使用python 实现对串口/dev/ttyUSB0进行上锁,使得该串口只能在一个python脚本中使用,其他脚本不能操作这个串口
  • ¥15 晶体塑性有限元——Damask求解
  • ¥15 写出这个有没有人能写一下今天中午就要
  • ¥30 设计一个图形用户界面来控制你机械臂的运动
  • ¥30 3d打印机无法识别到SD卡,如何解决?(相关搜索:格式化)
  • ¥15 RPG游戏架构设计和开发方法
  • ¥15 前端返回pdf时不显示内容
  • ¥50 如何在不能联网影子模式下的电脑解决usb锁
  • ¥20 服务器redhat5.8网络问题