【问题标题】:How to know if a number is in the x interval of a group如何知道一个数字是否在一个组的 x 区间内
【发布时间】:2021-08-06 20:49:41
【问题描述】:

我需要的算法逻辑有问题。

我有一组“y”个元素,我需要把它分成大小为“x”的其他组中的元素数量,然后找出第二组的“a”元素是否在第一个的“a”组。

例如,如果我有这 2 个组

A = {1,2,3,4}

B = {1,2,3,...,100}

100/4 是 25,所以如果 A=1 和 B=[1,25) 或 A=2 和 B=[25,50) 等等,函数应该为真

我怎样才能使算法具有可变的组大小? 我正在研究java,但逻辑就足够了

提前致谢!

【问题讨论】:

  • 两组是否总是包含从 1 到 x(或从 1 到 y)的数字?如果y mod x != 0,你期望哪个输出?
  • 是的,x 和 y 总是从 1 开始。如果 y 不能被 x 整除,则可以将数字四舍五入到最接近的整数,并将剩余的数字留在任何团体。例如,如果 y 为 110,x 为 4,则可以将组 1-24 25-49 50-74 75-110 或 1-34 35-59 50-84 85-110 或 1-27 28-56 57 -83 84-110 或任何其他组合,这不是一个确切的东西

标签: algorithm logic intervals


【解决方案1】:

如果y 可以被x 整除,则解决方案很简单:
x/y 将被视为我们应该考虑的区间的length。如果我们假设x=4y=100 将有四个区间length == 25:[1, 25], [26, 50], [51, 75], [76, 100](注意这些区间是关闭,与您的问题相反,因为如果它们是打开的,则不会包含最后一个元素。
所以算法的输入将是a(代表第a个区间)和b(一个介于1和y之间的数字)。如果b 在第a 个区间内,则输出为true
b 在第a 个区间内当且仅当b > length * (a-1)b <= length * a
以下代码实现了一个函数f,即使y % x != 0也能工作:在这种情况下,最后一个区间将包含更多元素(这些额外元素的数量是提醒y%x)。

public static boolean f(int a, int b, int x, int y) {
    int length = y / x;

    int reminder = y % x;
    if (a != x) {
        reminder = 0;
    }

    return b > length * (a - 1) && b <= length * a + reminder;
}

您可以向函数添加其他控件。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-10
    • 1970-01-01
    • 1970-01-01
    • 2011-11-23
    • 2019-08-01
    • 2023-03-04
    相关资源
    最近更新 更多