我试图找到一个最小的正数,它可以被1到20的所有数字整除。我们得到,2520是可以被1到10的每个数字除的最小数,没有任何余数。My find()查找从2520开始的数字,该数字可以被1-20之间的所有数字整除,但由于某种原因返回2520。我找不到我的find()有什么问题?
public class Solution {
public ArrayList<Integer> list = new ArrayList<Integer>();
// creating a list of integers from 1 to 20
public ArrayList<Integer> addtolist() {
for (int i = 1; i <= 20; i++) {
list.add(i);
}
return list;
}
// finds the smallest positive number that is evenly divisible by all
of the numbers from 1 to 20
public int find() {
int num = 2520;
while(true) {
for(int i: list) {
if(num % i == 0) {
return num;
}
else {
num = num + 1;
}
}
}
}
public static void main(String[] args) {
Solution sol = new Solution();
sol.addtolist();
System.out.println(sol.find());//2520
}
}
在您的代码中:
for(int i: list) {
if(num % i == 0) {
return num; // Returns immediately.
}
else {
num = num + 1;
}
}
一旦在列表中找到某个匹配的数字,您就会返回。您要做的只是在找到一个与列表中的所有值匹配的值时返回。
当(num%i==0)
时,您从for循环返回,因为i从1开始,这始终为真。相反,您需要等到结束才能返回:
public int find() {
int num = 2520;
while(true) {
boolean allDivisible = true;
for(int i: list) {
if(num % i != 0) {
allDivisible = false;
break;
}
}
if (allDivisible) {
return num;
else {
num = num + 1;
}
}
}
如果列表中有i,您的find函数将返回num。如果num中的每个i都是除数,则它应该只返回num。
虽然不得不说,这远远不是解决问题的最高效方案。
我一直在努力解决Euler项目中的第5个问题,这就像 2520是可以被1到10中的每一个数字除以而没有任何余数的最小数字。 可以被1到20的所有数字整除的最小正数是多少? 我决定更进一步,我决定找到一个最小的正数,它可以被从1到limit的所有数字平均整除,limit是用户定义的。 当我执行程序时,问题开始出现,它立即打印出0。我试图追踪我的代码,但没有成功。
问题5:2520是可以被1到10的每个数字除的最小数,没有任何余数。可以被1到20的所有数字整除的最小正数是多少? 我已经解决了Euler项目的问题5 以下是Java代码: 如何优化这个?
求可被1到N的所有数整除的最小数,不留余数。由于数字可能非常大,我们取模100000007的答案。 我认为可以被从1到N的所有数字整除的最小数字是LCM(1... N)。 例如:对于N=5,最小值为60。 因为60是能被所有数字形式(1-5)整除的最小数。 但由于一些奇怪的原因,它给了我错误的答案大N(1000),等等。什么可以导致这里可能的错误,我在这里的登录正确吗? 这是我试图实现的。
我有一个任务需要完成:
我正试图找出如何计算两个int(a和b)之间的所有数字,其中所有数字都可以与另一个int(k)整除,0作为除数。这是我到目前为止所做的,但它永远都是循环的。 此外,我还考虑通过计数这些数字并与位数进行比较来比较是否所有的数字都是可整除的 如有任何帮助,不胜感激。谢谢!
我正在尝试解决一个leetcode类型问题,这是一个实践问题,它伴随着即将到来的代码测试,我需要为工作做一个,我遇到了麻烦。任何人都可以帮助我了解出了什么问题? 我基本上是在寻找暴力选项,因为我不知道algos/DS。 编写一个函数: 功能溶液(A); 给定一个包含 N 个整数的数组 A,返回 A 中未出现的最小正整数(大于 0)。 例如,给定A = [1,3,6,4,1,2],函数应该返回5。