Java N以下3或5的所有倍数之和。欧拉投影
所以我在做ProjectEuler挑战,我被困在第一个挑战中,我使用Java作为pl。例如,如果我们必须列出10以下的所有自然数,它们是3或5的倍数,我们得到3、5、6和9。这些倍数之和是23。 我们必须求N以下3或5的所有倍数之和 我的代码可以在Eclipse上运行,但我得到了“很好的尝试,但是您没有通过这个测试用例”。使用stdout:No Response,当我提交代码时,我在所有测试用例上都得到了错误的答案,代码如下:Java N以下3或5的所有倍数之和。欧拉投影,java,sum,multiplication,challenge-response,Java,Sum,Multiplication,Challenge Response,所以我在做ProjectEuler挑战,我被困在第一个挑战中,我使用Java作为pl。例如,如果我们必须列出10以下的所有自然数,它们是3或5的倍数,我们得到3、5、6和9。这些倍数之和是23。 我们必须求N以下3或5的所有倍数之和 我的代码可以在Eclipse上运行,但我得到了“很好的尝试,但是您没有通过这个测试用例”。使用stdout:No Response,当我提交代码时,我在所有测试用例上都得到了错误的答案,代码如下: public class Solution { public
public class Solution {
public static void main(String[] args) {
for (int j = 0; j < args.length; j++) {
int N = Integer.parseInt(args[j]);
if (Somme(N) != 0) {
System.out.println(Somme(N));
}
}
}
public static int Somme(int Nn) {
int s = 0;
for (int i = 0; i < Nn; i++) {
if (((i % 3) == 0) || ((i % 5) == 0)
&& !(((i % 3) == 0) && ((i % 5) == 0))) {
s = s + i;
}
}
return (s);
}
}
公共类解决方案{
公共静态void main(字符串[]args){
对于(int j=0;j
更新:
所以,我看了更多,结果发现这是应该怎么做的:
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Solution{
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String line = br.readLine();
int Nbr = Integer.parseInt(line);
for(int j=0; j<Nbr;j++)
{
BufferedReader br2 = new BufferedReader(new InputStreamReader(System.in));
String line2 = br2.readLine();
String[] numbers = new String[Nbr];
numbers[j]= line2;
System.out.println(Somme(Long.parseLong(numbers[j])));
}
}
public static long Somme(long Nn) {
long s = 0;
for (int i = 0; i < Nn; i++) {
if (((i % 3) == 0) || ((i % 5) == 0)) {
s = s + i;
}
}
return (s);
}
导入java.io.BufferedReader;
导入java.io.IOException;
导入java.io.InputStreamReader;
公共类解决方案{
公共静态void main(字符串[]args)引发IOException{
BufferedReader br=新的BufferedReader(新的InputStreamReader(System.in));
String line=br.readLine();
int Nbr=整数.parseInt(行);
对于(int j=0;j您正在跳过一些不应跳过的数字
if (((i % 3) == 0) || ((i % 5) == 0)
&& !(((i % 3) == 0) && ((i % 5) == 0)))
这句话说:i
必须能被3
或5
整除,并且不能被3
和5
整除。换言之:i
必须能被3
或5
整除,但不能同时被两者整除。只要删除第二行,它就会起作用。图灵85所说的话和wazaaaap。
Project Euler的示例都表明它不接受不同的输入。您只需要生成正确的输出。因此,将Integer.parseInt(args[j]);
替换为Integer.parseInt(1000);
为了补充图灵所说的内容,解决方案应遵循以下psuedocode:
target=999
sum=0
for i=1 to target do
if (i mod 3=0) or (i mod 5)=0 then sum:=sum+i
output sum
使用for
循环,您可以获得从0
到1000
的所有数字,并且通过使用if
条件,您可以获得所需的数字,即3
、5
的倍数,将它们相加即可得到最终输出,如下所示:
public class SUM_3_5{
public static void main(String []args) {
int sum=0;
int i;
for(i=0;i<1000;i++)
{
if(i%3==0||i%5==0)
sum=sum+i;
}
System.out.println(sum);
}
}
public class SUM\u 3\u 5{
公共静态void main(字符串[]args){
整数和=0;
int i;
对于(i=0;i检查角落案例!如果输入大于int的大小??我不确定我是否理解您的意思,我是否应该控制用户输入?您是否应该使用标准输入?不作为参数?为什么要排除15的倍数?@Hadh抱歉,没有足够仔细地阅读问题。hackerrank从System.in.提供输入,并且非常具体地说明了如何进行输入(阅读他们的手册),当您在每种情况下计算两次总和时,也可能存在超时问题。另一个问题是整数溢出,请检查问题说明以了解可能的输入大小。integer.parseInt(1000);
?就1000
?OP如何启动程序无关紧要。如果他/她希望将参数作为命令行参数输入,这是完全正确的。结果不会受到影响(除非命令行参数将超过整数.MAX_值,但这不是练习的目标)不,你看在第一行你插入了多少个整数,例如,如果我有10和100,我想知道10下3和5的倍数和100下的和,输入应该是:2 10 100输出:23 2318是的,我做的那行没有做任何事情,我想我仍然有同样的问题这就是@zubergu所说的,系统中的一些东西。问题是将3或5的所有倍数相加。使用FOR循环,我们可以得到0到1000之间的所有数字,通过使用IF条件,我们得到所需的数字,即3,5的倍数,相加得到最终的输出。