gpt4 book ai didi

c - 如何在C中找到最接近的数字?

转载 作者:行者123 更新时间:2023-11-30 18:12:01 25 4
gpt4 key购买 nike

所以,我正在根据一本推荐的初学者书籍做一些练习:C Programming: A Modern Approach (2nd Edition)在解决其中一个问题时,我发现自己无法继续,因为我无法返回最接近用户输入的数字。注意:这个问题是在介绍循环、函数和数组之前提出的,因此我假设不需要这些。

我设法将问题提取并简化为以下内容。假设我有以下数字,并且我想返回最接近用户输入的数字:

10 20 30 40 50 60 > 70 80

printf("Enter a number to find closest value: ");
scanf("%d", &num);

例如:

用户输入:28最近的数字:30

接下来,我决定通过减去每个数字来找出 num 和每个数字之间的差异。

difference1 = num - 10;
difference2 = num - 20;

等等。 (我没有使用循环,因为书中尚未介绍这些)

我考虑到负差异 (25 - 40 = -15)。如果差异小于 0,我会将差异乘以 -1 以获得所有差异为正整数。通过这样做,我将能够成功比较差异:

    if (difference1 < 0) {
difference1 = difference1 * -1;
}

接下来,我将检查最小差异,以便通过执行以下操作来确定哪个是最接近的数字:

if (difference1 < difference2) {
min1 = difference1;
}
else {
min1 = difference2;
}

if (difference3 < difference4) {
min2 = difference3;
}
else {
min2 = difference4;
}

if (difference5 < difference6) {
min3 = difference5;
}
else {
min3 = difference6;
}

if (difference7 < difference8) {
min4 = difference7;
}
else {
min4 = difference8;
}

if (min1 < min2) {
min5 = min1;
}
else {
min5 = min2;
}

if (min3 < min4) {
min6 = min3;
}
else {
min6 = min4;
}

if (min5 < min6) {
min = min5;
}
else {
min = min6;
}

我知道这是一个很长的方法,但是如果不使用 for 循环,我无法缩短代码。

printf("Difference between the two numbers is %d\n", min);

由于 min 包含用户输入和最接近的数字之间的差异,我无法找到一种方法来打印最接近用户输入的数字。如何追踪减去后的原始数字的最小差异?任何建议将不胜感激,并请原谅这个问题的基本性质。

最佳答案

我可以帮助您缩短代码。

这是我的方法

int num = 71;
int diff,ans;
int div10 = (num / 10);
int lower = div10 * 10;
int upper = (div10 + 1) * 10;
if(lower<10) lower=10;
if(lower>80) lower=80;
if(upper<10) upper=10;
if(upper>80) upper=80;
int diff1 = lower - num;
int diff2 = upper - num;
if(diff1 < 0) diff1 *= -1;
if(diff2 < 0) diff2 *= -1;
if(diff1 < diff2) {
ans = lower;
diff = diff1;
}
else {
ans = upper;
diff = diff2;
}
printf("ans=%d, diff=%d\n",ans,diff);

关于c - 如何在C中找到最接近的数字?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42178972/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com