如何找到与C中的数字最接近的值?
我有以下C代码:如何找到与C中的数字最接近的值?,c,algorithm,comparison,C,Algorithm,Comparison,我有以下C代码: #define CONST 1200 int a = 900; int b = 1050; int c = 1400; if (A_CLOSEST_TO_CONST) { // do something } 检查a是否是a、b和c中最接近常数的值的便捷方法是什么 编辑: 无论我是否有3个变量或类似的数组(可能不止3个元素): 您需要将常量与每个元素进行比较。(适用于3个元素,但对于较大的elementcount,这是一个非常糟糕的解决方案,在这种情况下,我建议使用某种分
#define CONST 1200
int a = 900;
int b = 1050;
int c = 1400;
if (A_CLOSEST_TO_CONST) {
// do something
}
检查a是否是a、b和c中最接近常数的值的便捷方法是什么
编辑:
无论我是否有3个变量或类似的数组(可能不止3个元素):
您需要将常量与每个元素进行比较。(适用于3个元素,但对于较大的elementcount,这是一个非常糟糕的解决方案,在这种情况下,我建议使用某种分治方法)。比较后,取它们的差值,最小的差值是常数最接近的差值)比较(a-const),(b-const)和(c-const)的绝对值。无论哪一个绝对值最低,都是最接近的。这适用于三个变量:
if (abs(a - CONST) <= abs(b - CONST) && abs(a - CONST) <= abs(c - CONST)) {
// a is the closest
}
if(abs(a-CONST)此答案是对您编辑原始问题和评论的反应。
(请注意,为了确定数组的结尾,我们可以使用不同的方法,我将在这个特定场景中使用的方法是最简单的方法。)
//我认为您需要为abs()包含math.h,或者自己实现它。
//该代码不处理重复项。
//我还没试过,所以可能有个虫子潜伏在里面。
常量int ArraySize=;
常数int=常数;
int值[ArraySize]={……};
int tempmimum=abs(YourArray[0]-YourConstant);//最简单的方法
对于(inti=1;i
对于一个大的排序集,您应该能够使用二进制搜索来查找与数字相邻的两个数字(模边情况),其中一个必须是最接近的
因此,您将能够实现O(logn)性能,而不是O(n)。这里是一个通用的方法
函数接受int数组、数组大小和指向比较函数的指针。如果第一个值小于第二个值,比较谓词将返回true。刚刚返回a
的函数将查找数组中最小的元素。pinouchon()
比较谓词执行贴近度比较
#include <stdio.h>
#include <stdlib.h>
#define CONST 1200
int pinouchon(int a, int b)
{
return abs(a - CONST) < abs(b - CONST);
}
int min_element(const int *arr, int size, int(*pred)(int, int))
{
int i, found = arr[0];
for (i = 1; i < size; ++i)
{
if (pred(arr[i], found)) found = arr[i];
}
return found;
}
int main()
{
int values[3] = {900, 1050, 1400};
printf("%d\n", min_element(values, 3, pinouchon));
return 0;
}
#包括
#包括
#定义常数1200
内皮诺孔(内a、内b)
{
返回abs(a-CONST)
伪代码:
closest_value := NULL
closest_distance := MAX_NUMBER
for(value_in_list)
distance := abs(value_in_list - CONST)
if (distance < closest_distance)
closest_value := value_in_list
closest_distance := distance
print closest_value, closest_distance
最近的_值:=NULL
最近_距离:=最大_数
用于(值在值列表中)
距离:=abs(列表中的值-常数)
if(距离<最近距离)
最近的_值:=_列表中的值
最近距离:=距离
打印最近的_值、最近的_距离
我在Mark Byres代码中添加了一些内容
int is_first_closest(int values[]) {
int dist = abs(values[0] - CONST),closest; //calculaing first difference
int size = sizeof( values ) //calculating the size of array
for (int i = 1; i < size; ++i) {
if (abs(values[i] - CONST) < dist) { //checking for closest value
dist=abs(values[i] - CONST); //saving closest value in dist
closest=i; //saving the position of the closest value
}
}
return values[i];
}
int是最接近的(int值[]){
int dist=abs(值[0]-CONST),最近;//计算第一个差
int size=sizeof(values)//计算数组的大小
对于(int i=1;i
此函数将获取一个整数数组,并返回最接近常数的数字。这是一个搜索练习。通常为min(abs(val CONST))这更像是一个数学问题,而不是一个C编码问题。试着最小化常量和数字之间差值的绝对值。我不想要最接近的值,我想知道某个特定选择的变量(比如a)是否是closest@pinouchon在第二行中,将a与搜索结果进行比较(为了更好的结果缓存你的搜索结果)这就是想法。我想知道你是否可以很容易地概括它。(例如4个变量)@皮诺雄:如果你使用一个由n个元素组成的数组而不是n个变量,那就更好了。如果你想使用这种线性方法,请将常数插入数组中,并在数组中循环,比较每个元素。@markByers编辑了我的问题,如果你有一个带有数组的通用解决方案,我会很高兴。一种使这个函数更简单的方法ric将传递第三个参数,该参数表示我们感兴趣的整数的位置。如果希望保持is_first_closest()中的逻辑相同,只需在开始时将第一个值与所需位置的值交换,然后返回。
#include <stdio.h>
#include <stdlib.h>
#define CONST 1200
int pinouchon(int a, int b)
{
return abs(a - CONST) < abs(b - CONST);
}
int min_element(const int *arr, int size, int(*pred)(int, int))
{
int i, found = arr[0];
for (i = 1; i < size; ++i)
{
if (pred(arr[i], found)) found = arr[i];
}
return found;
}
int main()
{
int values[3] = {900, 1050, 1400};
printf("%d\n", min_element(values, 3, pinouchon));
return 0;
}
closest_value := NULL
closest_distance := MAX_NUMBER
for(value_in_list)
distance := abs(value_in_list - CONST)
if (distance < closest_distance)
closest_value := value_in_list
closest_distance := distance
print closest_value, closest_distance
int is_first_closest(int values[]) {
int dist = abs(values[0] - CONST),closest; //calculaing first difference
int size = sizeof( values ) //calculating the size of array
for (int i = 1; i < size; ++i) {
if (abs(values[i] - CONST) < dist) { //checking for closest value
dist=abs(values[i] - CONST); //saving closest value in dist
closest=i; //saving the position of the closest value
}
}
return values[i];
}