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

时间:2021-01-26 20:53:31

标签: java python algorithm

我是编程新手,无法解决一项任务。我有几个输入示例。第一行包含两个数字 m(纸上的位数,1

第一个例子:

输入:

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

99 5 85

输出:

10 //85 到 95,所以相差 10

第三个例子:

输入:

1 10

9999

输出:

0 // 没什么可改变的

我现在拥有的:

' '

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

2 个答案:

答案 0 :(得分:0)

将每个输入数字分解成数字乘以 10 的适当幂。按 10 的幂降序对这些数字进行排序,数字升序。按此顺序应用您的操作。

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

答案 1 :(得分:0)

我很快想出了以下解决方案

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' 个最大的数字,并基本上获取它们的总和并打印出来。

相关问题