CS50 pset3 始终找到 returns true
CS50 pset3 find always returns true
所以我一直在努力解决这个问题,现在需要一些布尔函数方面的帮助。我卡在了 pset3 中 helpers 的搜索部分。
我知道我的选择排序功能有效,因为我使用 printf 检查正在排序的数字,并且我用简单的线性搜索测试了 find 以确认它正常工作。
我的搜索功能代码如下:
bool search(int value, int values[], int n)
{
// Set upper and lower limits for mid point calculation
int max = n - 1;
int min = 0;
while (min <= max)
{
// Set the mid point of values as half the difference of the upper and lower limit.
int mid = (max - min)/ 2;
// If the array position we look at for this itteration of mid is equal to the value, return true
if (value == values[mid])
return true;
// If the mid value is less than our value, look at the right half (+1 as we dont need to look at the mid point again)
else if (value > values[mid])
return min = mid + 1;
// Same principle but for the left half of the array
else if (value < values [mid])
return max = mid - 1;
}
return false;
}
据我所知,我的逻辑对于实际计算是合理的。我尝试了多种不同的 returning false 方法,例如 "if (value < values[mid + 1] && value > values[mid -1]" 到 return false 但无济于事,所以我从此处的代码中省略了它们。任何帮助将不胜感激。
干杯
汤姆
我没有检查你代码的逻辑,但你不能将函数设置为 return 布尔值,但也不能将它用于 return 数字,如
return 最小值 = 中值 + 1;
或者在
return 最大 = 中间 - 1;
只需将函数设置为 return int 并使用 1 和 0 作为 true 和 false。
此外,C 没有布尔类型,除非您在代码中定义它们或导入它们 stdbool.h
编辑:刚刚记得您不能更改函数的签名,因此请尝试创建您自己的函数,然后在已定义的搜索函数中调用它。
所以我一直在努力解决这个问题,现在需要一些布尔函数方面的帮助。我卡在了 pset3 中 helpers 的搜索部分。
我知道我的选择排序功能有效,因为我使用 printf 检查正在排序的数字,并且我用简单的线性搜索测试了 find 以确认它正常工作。
我的搜索功能代码如下:
bool search(int value, int values[], int n)
{
// Set upper and lower limits for mid point calculation
int max = n - 1;
int min = 0;
while (min <= max)
{
// Set the mid point of values as half the difference of the upper and lower limit.
int mid = (max - min)/ 2;
// If the array position we look at for this itteration of mid is equal to the value, return true
if (value == values[mid])
return true;
// If the mid value is less than our value, look at the right half (+1 as we dont need to look at the mid point again)
else if (value > values[mid])
return min = mid + 1;
// Same principle but for the left half of the array
else if (value < values [mid])
return max = mid - 1;
}
return false;
}
据我所知,我的逻辑对于实际计算是合理的。我尝试了多种不同的 returning false 方法,例如 "if (value < values[mid + 1] && value > values[mid -1]" 到 return false 但无济于事,所以我从此处的代码中省略了它们。任何帮助将不胜感激。
干杯
汤姆
我没有检查你代码的逻辑,但你不能将函数设置为 return 布尔值,但也不能将它用于 return 数字,如 return 最小值 = 中值 + 1; 或者在 return 最大 = 中间 - 1;
只需将函数设置为 return int 并使用 1 和 0 作为 true 和 false。
此外,C 没有布尔类型,除非您在代码中定义它们或导入它们 stdbool.h
编辑:刚刚记得您不能更改函数的签名,因此请尝试创建您自己的函数,然后在已定义的搜索函数中调用它。