获取在布尔值上返回 true 的最接近值

本文关键字:最接近 true 返回 布尔值 获取 | 更新日期: 2023-09-27 18:19:13

如果我想获得最接近数字的值,但该值还必须在名为 IsMultipleOf7 的布尔值上返回 true,该布尔值在 7 的倍数上返回 true。

例如,我有一个int x = 523.所以 7 的最接近的倍数是 525,所以我的布尔值将返回真 525。

我怎样才能得到这个号码?

获取在布尔值上返回 true 的最接近值

此函数将返回最接近的7的倍数或数字本身(如果它是7的倍数

(
public int GetClosestNumber(int number, out bool isMultipleOf7)
    {
    // if the number is a multiple of 7 isMultipleOf7 is set to true
    isMultipleOf7 = number%7 == 0;
    if (isMultipleOf7)
    {
        // if it's a multiple of 7 then the closest one is the number itself
        return number;
    }
    // if it's not a multiple of 7 then try find the closest.
    var lower = number - (number % 7);
    var upper = (number + 7) - (number %7);
    var diffL = Math.Abs(number - lower);
    var diffU = Math.Abs(number - upper);
    return diffL > diffU ? upper : lower;
}

下面是一个使用示例:

bool IsMultipleOf7;
// Following line will output: Closest multiple of 7 is: 525
Console.WriteLine("Closest multiple of 7 is: {0}", 
                   GetClosestNumber(523, out IsMultipleOf7)); 
// Following line will output: The number itself is not a multiple of 7"
Console.WriteLine("The number itself is {0} a multiple of 7", 
                   IsMultipleOf7 ? string.Empty: "not");

现场演示也可在此处获得

int x = 523;
while ((int)x/7!=(decimal)x/7){
    x++;
}
return x;
int x = 523;
int result = ((x / 7) + 1) * 7;

如果你的数字可以除以 7 并且应该保持相同的数字,您可能需要一个更复杂的公式。或者,也许您过于简化了问题?

我能想到两种方法。第一个是我评论过的蛮力方法。如果从数字 x 开始,请对其进行测试。如果它有效,万岁!如果没有,请尝试将 1 添加到 x 并进行测试。然后从 x 中减去 1 并进行测试。然后用两个和三个来做这件事,同时上下测试。一旦您的测试返回 true,您就找到了(其中一个(最接近的数字。此方法是通用方法,适用于任何测试函数。

因为我们知道您正在使用IsMultipleOf7作为测试,所以可以使用更智能的方法。想象一下,如果您的测试是IsMultipleOf999999999,那将花费多少时间!在达到最接近的数字之前,可能需要测试这么多数字。相反,可以使用一些数学。首先,计算 x 模 7(对于 IsMultipleOf7(,用 C(++( 编写x % 7。此值告诉您 x 与小于 x 的 7 的最大倍数有多远。如果此值为 0,则 x 是 7 的倍数。如果值为 1、2 或 3,则 x 减去该值是最接近的倍数。如果值是4、5或6,x加上差值7(7 - value(是最接近的倍数。

一些伪代码:

x = 523
value = x modulo 7
if(value == 0):
  return x
if(value < 4): // that is, less than half of 7
  return x - value
otherwise
  return x + (7 - value)

x=7*Math.Round(((float)x)/7.0)

^最简单的解决方案就在那里;)

不需要所有这些循环和东西。

除以 7,如果小数小于 0.5,则最近的分母为下限,否则为上限。Round(( 为您做到这一点,然后只需将您的新 int 乘以 7 即可创建一个可被 7 整除的数字(因为它是一个乘以 7 的 int(。它将获得高于低于的最接近的值。根本不需要布尔值。确保将浮点数转换为 x,以便它可以除以 7,而不会导致整数逻辑的地板。