【问题标题】:How can i show only the largest number from my output?如何仅显示输出中的最大数字?
【发布时间】:2021-03-08 13:40:23
【问题描述】:

在这个程序中,我试图显示最长的连续数字。 (例如:输入:1 1 1 2 2 2 2 3 3 3 3 3,输出:3 4 5

我的问题是如何仅显示输出中的最大数字。在此示例中为5

我们不允许使用数组,有没有其他方法可以解决这个问题?

public static void main(String args[]) {
        
    Scanner sc = new Scanner(System.in);
        
    int zahl = 0;
    int anzahl = -1;
    String maxString = "";
        
    while (sc.hasNextInt()) { 
              
        int i = sc.nextInt();
 
        if (anzahl == i | anzahl == -1) {
            zahl++;
        } else if(anzahl != i) {
            maxString += zahl + "\n" ;
            zahl = 1;
        }
              
        anzahl = i;
    }
          
    sc.close();
    System.out.println(maxString + (zahl + 1));
}

【问题讨论】:

    标签: java string eclipse integer


    【解决方案1】:

    这是我的想法:

        Scanner sc = new Scanner("1 1 1 2 2 2 2 2 3 3 3 4 4 4 4 4 4 5 5 5");
    
        int letzter = 0;
        int anzahl = 0;
        String rekord = "";
    
        while (sc.hasNextInt()) {
            int gegeben = sc.nextInt();
    
    
            if(letzter == -1 || letzter == gegeben) {
                anzahl++;
            } else {
                anzahl = 1;
            }
    
            if(rekord == ""){
                rekord = String.valueOf(gegeben);
            }else if(anzahl > rekord.length()) {
                rekord = String.format("%0" + anzahl + "d", 0).replace("0", String.valueOf(gegeben));
            }
    
            letzter = gegeben;
        }
    
    
        sc.close();
    

    字符串 rekord 真正拥有当前记录,它可以被覆盖。

    (4ms 运行时间)

    【讨论】:

      【解决方案2】:

      只需创建一个变量来跟踪循环外的最大数量,并在检测到新子序列时更改它并在循环后检查最后一个子序列的长度:

      Scanner sc = new Scanner("1 1 1 2 2 2 2 2 3 3 3 4 4 4 4 4 4 5 5 5");
      
      int zahl = 0;
      int anzahl = -1;
      String maxString = "";
      int maxFreq = 0; // maximal frequency of numbers
      
      while (sc.hasNextInt()) { 
        
        int i = sc.nextInt();
      
        if(anzahl == i || anzahl == -1) {
            zahl++;
        } else {
            maxFreq = Math.max(maxFreq, zahl); // update maxFreq
            maxString += zahl + "\n" ;
            zahl = 1;
        }
        
        anzahl = i;
      }
      maxFreq = Math.max(maxFreq, zahl); // check the tail
      
      sc.close();
      //System.out.println(maxString + (zahl + 1) );
      System.out.println("maxFreq=" + maxFreq);
      

      打印maxFreq=64s 的计数)。

      对于这个输入Scanner sc = new Scanner("1 1 1 2 2 2 2 2 2 2");,代码打印maxFreq=7

      【讨论】:

        【解决方案3】:

        (我没有足够的代表发表评论)

        除了 Alex 写的内容之外,您还应该将 else if(anzahl != i) 更改为 else

        【讨论】:

        • 这是一个不错的收获!
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-09-14
        • 2021-08-14
        • 2021-11-28
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多