【问题标题】:How can I sum 3 highest numbers when entered 4 numbers输入4个数字时如何求和3个最高数字
【发布时间】:2018-03-29 21:25:29
【问题描述】:

我还在学习如何使用 java,我想知道当用户输入 4 个数字时,是否有办法将前 3 个数字相加?

例如。用户输入 5 6 7 6,他们将添加 6 7 6 即 19。

我得到的唯一想法是使用 if else 语句?但我觉得这在我的代码中效率不高。

在此致谢

【问题讨论】:

  • 用户输入了什么 6,6,6,6 那么应该是什么输出
  • 谁能告诉我
  • @javafan 我要出去说 18 岁。
  • @MichaelMarkidis 是的,现在可以了
  • @MichaelMarkidis 希望我们需要为它创建一个单独的条件

标签: java


【解决方案1】:

将它们存储在数组中。 对数组进行排序。 总结最后 3 个元素 i,e

int[] arr={7,8,5,2,1,4,5};
Arrays.sort(arr);
int sum = 0;
        for(int i=arr.length-1;i>=arr.length-3;i--) {
            sum += arr[i];
        }
        System.out.println(sum);

【讨论】:

  • 感谢您的回答,我如何从用户输入中获取数组而不是预先确定的数字?我可以创建一个variable = in.nextInt(); 并用它代替您使用的数字吗?
  • 扫描仪扫描仪=新扫描仪(System.in); int n =scanner.nextInt();//数组的大小 int arr[] = new int[n]; for (int i=0;i
【解决方案2】:

假设一个 int 数组并且只输入 4 个数字,这个问题实际上可以改写为在删除数组的最小元素后得到一个总和。并不是说它在这个大小上很重要,排序会产生 O(nlogn) 成本。相反,只需在一个循环中线性地执行它,找到最小值并在最后删除它。

int[] nums = { 5, 6, 7, 6 };
int min = Integer.MAX_VALUE;
int sum = 0;

for (int num : nums) {
    if (num < min) {
        min = num;
    }
    sum += num;
}

sum -= min;

System.out.println(sum);

【讨论】:

  • 感谢您的回答,但只是为了澄清。这对用户输入有用吗?不仅仅是数字 5,6,7,6 被使用。我会为用户输入创建一个变量并将其替换为int[] nums = { 5, 6, 7, 6 };吗?
  • @jm263 用于用户输入,将List&lt;Integer&gt;Scanner 结合使用。只要 List 被命名为nums,它就可以工作(增强的 for 循环适用于任何实现 Iterable 且迭代器返回 int 的类)。 Check out the accepted answer here, it also shows how to use an int[] if you need an array.
【解决方案3】:

使用 Array.sort

    int arr[] = {5,6,7,6};
    Arrays.sort(arr);
    int total = 0;
    for (int i = 3; i > 0; i--) // what a fool, it was the wrong way around
        total += arr[i];

    System.out.println(total);

或者你可以使用

    Integer arr[] = {5,10, 10, 10};
    Arrays.sort(arr, Collections.reverseOrder());

从0到3正常循环

【讨论】:

  • 我认为你的答案是正确的,很好不知道谁投了反对票
  • 我没有投反对票,但我认为你实际上得到了没有最大值的总和。 OP想要没有最小值的总和。
  • 他是初学者,不是使用预定义方法和集合的 Java 经验者。
  • 如果你将它们全部相加并减去最小的,你可以在 O(n) 中得到答案,而不是 O(n log n)你可以使用sort()。并不是说对 4 个值进行排序很明显,但仍然...
  • @AlokSingh 它们是非常基本的 JDK 方法
【解决方案4】:

我建议您先创建一个集合,然后再排序。 如果你排序和求和,一个测试用例比如

9, 5, 9, 7, 6, 2 将失败,因为数组中的最大数字是 9,5,7,排序后您只会在前三个索引处得到 9,9,9

通过创建一个集合(不重复)

数组将是 9,5,7,6,2 然后,您可以对其进行排序并将前三个相加。

【讨论】:

  • 从他们给出的示例中,需要重复。 6 7 6 有重复项。
  • 还将输入 4 个数字
  • 那么问题的标题需要改写
  • 题目遗漏的内容在问题文本中进行了解释
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-07-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-01-17
相关资源
最近更新 更多