最终和初始总和之间的最大差值

2024-05-21 05:53:59 发布

您现在位置:Python中文网/ 问答频道 /正文

我是编程新手,解决一项任务有困难。我有几个输入示例。第一行包含两个数字m(纸上的位数,1<;m<;1000)和h(操作数限制,1<;h<;1000)。我有机会,不超过h次,从一张纸上取任何数字(意思是m),然后在其中一个旧数字上画画,然后在其位置上写一个新的任意数字。我可以通过什么最大值来增加纸上所有数字的总和

第一个例子:

输入:

5.2//m和h

1 3 1 4 5//m=5,因此我可以添加5个任意数字,h=2,因此我可以更改2个数字

输出:

16//因为我把1和1改成了9和9,所以差8和8,和是16

第二个例子:

输入:

3.1

99585

输出:

10//85到95,因此差值为10

第三个例子:

输入:

110

9999

输出:

0//无需更改

我现在所拥有的:

    Scanner sc = new Scanner(System.in);
    System.out.println("Enter the number: ");
    int m = sc.nextInt();
    int h = sc.nextInt();
    System.out.println("Entered: " + m);
    System.out.println("Entered: " + h);
    int[] numbers = new int[m];
    for(int i = 0; i < m; ++i) {
        numbers[i] = sc.nextInt();
    }
    Arrays.sort(numbers);
//here is my logic: I am changing 1 to 9 
    for (int i = 0; i < h; i++) {
        if (numbers[i] < 10) {
            numbers[i] = 9;
        }
    else if (numbers[i] > 9 and numbers[i] < 100) {
    numbers[i] = 99;
    }
    }
    sc.close();

我的逻辑可以用于第一个示例,但对于第二个示例,它不起作用。如果我使用正确的逻辑,你能帮助我吗?或者有没有更简单的方法来解决这个问题?提前谢谢


Tags: lt示例newfor数字outsystem例子
2条回答

我很快想出了下面的解决办法

public static void calculateMax(int m,int h, int[] arr){
     int sum = 0;
     ArrayList<Integer> al = new ArrayList<>();
     for(int i=0;i<arr.length;i++){
         String stringNum = Integer.toString(arr[i]);
         int num = Integer.parseInt(stringNum.substring(0, 1));
         if(num!=9){
             al.add(Integer.parseInt(("9"+stringNum.substring(1)))-arr[i]);
             continue;
         }
         al.add(0);
     }
     Collections.sort(al);
     int j = al.size()-1;
     for(int i=0;i<h && j>0;i++){
         sum+=al.get(j );
     }
     System.out.println(sum);
 }

这里我所做的基本上是,计算每个数字的最大值,去掉一个数字,换成9。我将它们存储在一个列表中。然后我们可以对该列表进行排序,从存储的列表中获取“h”最大值,基本上得到它们的总和并打印出来

将每个输入数字按其相应的10次方的倍数折成数字。按10次幂降序,数字升序排序。按此顺序应用您的操作

例如,876、12、42->;800、70、6、10、2、40、2->;800, 10, 40, 70, 2, 2, 6.

相关问题 更多 >