我是编程新手,无法解决一项任务。我有几个输入示例。第一行包含两个数字 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 // 没什么可改变的 我现在拥有的: 我的逻辑适用于第一个示例,但不适用于第二个示例。如果我使用正确的逻辑或有更简单的方法来解决这个问题,你能帮助我吗?提前致谢。' '
答案 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' 个最大的数字,并基本上获取它们的总和并打印出来。