我需要一个算法的逻辑有问题。
我有一组"y"元素的数量,我需要把它分成另一组大小为x的元素的数量;然后看看是否有" a "元素的第二组在"第一个组
例如,如果我有这两个组
A = {1,2,3,4}
B ={1,2,3,…,100}
100/4是25,所以如果A=1和B=[1,25]或A=2和B=[25,50]等,函数应该为真
我怎样才能使算法使它具有可变的组大小?我在java上工作,但只是逻辑就足够了
提前感谢!
如果y
可被x
整除,则解很简单:x/y
将被视为我们所要考虑的区间的length
。如果我们假设x=4
和y=100
有length == 25
的四个区间:[1,25],[26,50],[51,75],[76,100](注意,这些区间是封闭的,与你的问题相反,因为如果它们是开放的,最后一个元素就不会包括在内)。
因此,算法的输入将是a
(表示第a个区间)和b
(1到y
之间的数字)。如果b
在第a个区间,则输出结果为true
,b
在b > length * (a-1)
和b <= length * a
之间的第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;
}
你可以给函数添加额外的控件。