#define MAX 100000
bool hasPair(int array[], int start, int end, int size, int number)
{
int i, temp;
bool binMap[MAX] = {0}; /*initialize hash map as 0*/
for(i = 0; i < size; i++)
{
temp = number - array[i];
if((temp>=0 && binMap[temp] == 1) && (temp != array[i]) && (array[i]>=start && array[i]<=end))
{
printf("The array contains at least one pair which sums up to %d.\n",number); // problem here
return true;
}
binMap[array[i]] = 1;
if(binMap[temp] == 0 && binMap[array[i]] == 0) //and here
{
printf("The array does not contain any pair which sums up to %d.",number);
return false;
}
}
}
我需要编写一个函数来获取一个数组,它的大小,它的元素范围(开始和结束)和一个随机数作为输入,输出必须是一个声明是否在它内部有一对不同的数字数组,它们的总和等于我们作为输入输入的随机数。我有if语句的问题, 因为例如: -
10个元素的数组,这些元素的范围是0-10,随机数是18,数组元素是: - 0,5,5,2,9,8,2,7,8,2。这个数组的两个不同数字之间的总和不会给我们18 它在我写的函数中运行良好。
问题是,例如,如果我们采用相同的数组,这次我们将18替换为10然后将有两个不同的数字,它们的总和将等于10但是在我的函数中,如果我输入带有随机数的数组10然后它不会工作,我认为我的If语句有问题,所以如果你能看到它在这里出现什么问题?
答案 0 :(得分:0)
你的错误是在第if
条件下。这是多余的。您总是在第一次迭代后调用此案例,并且您不会继续进行下一次迭代。
你应该完全删除第二个if条件,而是在for
循环之后添加一个简单的语句:return false;
。
这个想法是你应该让算法继续进行下一次迭代,即使一个是不可靠的。完成循环后,只返回false
,而不会在其中找到匹配的元素 - 现在只能说不存在这样的元素。