【问题标题】:sum of two numbers eqal which is given user input给定用户输入的两个数字 eqal 的总和
【发布时间】:2014-06-05 09:09:20
【问题描述】:

我有一个包含 10 个项目的数组:

int [] arrayNum = new [] {1,2,3,4,5,6,7,8,9,10}

当用户从控制台输入数值 10 时:

请输入数字:10

我想找到总和为10(第一个数字对)的数字

在上面的数组中,我应该得到 4 和 6。

请给我最好的解决方案。

【问题讨论】:

  • 欢迎使用 StackOverflow。这不是输入要求和实施程序的地方。请展示您尝试过的方法、有效的方法以及问题所在。
  • 这个问题似乎是题外话,因为它要求代码没有表现出努力。
  • 为什么是 4+6?为什么不是 1+9?
  • 我几乎可以闻到它是什么语言,但总是使用标签指定它以避免混淆

标签: arrays


【解决方案1】:

下面是伪代码,您可以从这些伪代码开始查找加起来达到所需目标的几个数字:

array[] = {1 .. 10}
desired_value = 12     # will give 2 and 10, from 1 .. 10

for index1 in 1 .. array.size() - 1:
    for index2 in index1 + 1 .. array.size():
        if array[index1] + array[index2] == desired_value:
            print array[index1], array[index2]
            stop program
print "No pairs found"

这假定基于一个的数组索引,并会为您提供具有“最左侧”(数组中最早的)初始编号的第一对。

将其转换为您必须使用的任何实际语言是我留给您的工作,因为:

  • 您没有指定语言;
  • 如果你的练习,练习,练习,你会成为一个更好的程序员;和
  • 很可能是课堂作业,在这种情况下,您应该自己完成并学习 :-)

【讨论】:

    【解决方案2】:

    此问题的最佳解决方案是使用 INVARIANTS 进行操作,并且它还报告了 EPI 书中的推理(Elements of编程面试)。

    无论如何,找到第一对(如果存在)的最佳解决方案(复杂性O(n))是有两个指针然后(例如在 Java 中):

    int i = 0, j = array.length-1;
    do {
        int sum = array[i] + array[j];
        if(sum == k) {
            System.out.println("Number are: " + array[i] + " and " + array[j]);
            break;
        }
    
        if(sum < k) i++;
        else j--;
    
    } while (i <= j);
    

    【讨论】:

    • 你可能想提一下假设一个排序数组。
    • 当然。他之前写了一个排序数组,所以我假设了这一点。无论如何,他必须对数组进行排序才能使用此算法。
    猜你喜欢
    • 1970-01-01
    • 2014-12-08
    • 1970-01-01
    • 1970-01-01
    • 2022-01-09
    • 2011-09-27
    • 2014-10-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多