给出用户输入的两个数相等的和

时间:2014-06-05 09:09:21

标签: arrays

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

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

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

  

请输入数字:10

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

在上面的数组我应该得到4& 6。

请给我最好的解决方案。

2 个答案:

答案 0 :(得分:0)

这是你可以开始的伪代码,找到一些数字加起来达到预期的目标:

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"

这假定基于一个数组的索引,并且将为您提供第一对“最左边”(数组中最早的)初始数。

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

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

答案 1 :(得分:0)

此问题的最佳解决方案是使用 INVARIANTS 进行操作,并且还在 EPI 一书中报告了原因编程访谈的要素)。

无论如何,找到第一对(如果存在)的最佳解决方案(复杂度 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);