我是编程新手,解决一项任务有困难。我有几个输入示例。第一行包含两个数字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();
我的逻辑可以用于第一个示例,但对于第二个示例,它不起作用。如果我使用正确的逻辑,你能帮助我吗?或者有没有更简单的方法来解决这个问题?提前谢谢
我很快想出了下面的解决办法
这里我所做的基本上是,计算每个数字的最大值,去掉一个数字,换成9。我将它们存储在一个列表中。然后我们可以对该列表进行排序,从存储的列表中获取“h”最大值,基本上得到它们的总和并打印出来
将每个输入数字按其相应的10次方的倍数折成数字。按10次幂降序,数字升序排序。按此顺序应用您的操作
例如,876、12、42->;800、70、6、10、2、40、2->;800, 10, 40, 70, 2, 2, 6.
相关问题 更多 >
编程相关推荐