我有一组给定的整数:
A[] = { 2, 3, 4, 5, 6, 7, 8, 10, 15, 20, 25, 30, 40, 50, 100, 500 }
我想要检查给定的整数
T
是否可以被A []
中的数字的倍数表示; 编辑澄清: A[]中的任何数字都可以使用。如果使用了,只能使用一次。 例如60是有效的T。60=30*2。 另外90也是有效的。90=3*5*6。检查哪些数字可以组成该整数
T
。- 如果数字
T
不能被这些数字的倍数表示,则返回给定T
的两个最接近的整数(可以用这种方式写)。
如果有人能帮忙第1部分,我认为我自己可以解决第2部分和第3部分。
我知道这是一个算法问题,甚至是一个数学问题,但如果有人能帮忙,请务必联系我。
不是家庭作业。请看下面的评论。
#
解决方案。 非常感谢所有答案。特别感谢一个答案(但作者选择删除它,我真的不知道为什么,因为它是正确的)。 感谢作者(不记得你的名字了)。
#
带有变化的解决方案代码(作者的算法多次使用了一个乘数。这个算法只使用了一个乘数)
int oldT = 0;
HashMap<Integer, Boolean> used = new HashMap<Integer, Boolean>();
while (T != 1 && T != -1) {
oldT = T;
for (int multiple : A) {
if (!used.containsKey(multiple)) {
if (T % multiple == 0) {
T = T / multiple;
used.put(multiple, true);
}
}
}
if (oldT == T)
return false;
}
return true;
A
的每个元素最多只能使用一次。 - Svante