所以我正在解决HackerRank(Project Euler Q1)上的这个问题链接在这里,并使用以下代码来解决它
import java.io.*;
import java.util.*;
import java.text.*;
import java.math.*;
import java.util.regex.*;
public class Solution {
public static void main(String[] args) {
/* Enter your code here. Read input from STDIN. Print output to STDOUT. Your class should be named Solution. */
int T = 0;
ArrayList<Integer> N = new ArrayList<Integer>();
String[] Input = args;
if (args.length>1){
T = Integer.parseInt(args[0]);
if(T<1||T>Math.pow(10,6))
System.exit(0);
}
if (args.length-1 == T){
for (int i=1;i<args.length;i++){
N.add(Integer.parseInt(args[i]));
int sum3=0,sum5=0,sum15=0;
int count=0;
while (count<N.get(i-1)){
sum3+=count;
count+=3;
}
count =0;
while (count<N.get(i-1)){
sum5+=count;
count+=5;
}
count =0;
while (count<N.get(i-1)){
sum15+=count;
count+=15;
}
N.set(i-1,(sum3+sum5-sum15));
}
}
for(int j=0;j<N.size();j++)
System.out.println(N.get(j));
}
}
这在 IDE 上提供了以下输出:
23
2318
输入时:
2
10
100
这与 HackerRank 上的预期输出相匹配,但是当我在网站上使用此代码时,它说:
输入(标准输入)
2
10
100
您的输出(标准输出)
~ no response on stdout ~
预期产出
23
2318
编译器消息
Wrong Answer
我观察到的一件事是我无法在 HackerRank 上的循环内打印任何内容。解决这个问题的方法是什么?
您没有按照 HackerRank 希望的方式从 STDIN 进行读取。您不应该从 args 获取输入,而应该做这种事情:
Scanner sc = new Scanner(System.in);
int numberOfTestCases = sc.nextInt();
等等。
我刚刚运行了这段代码,编译良好并提交了它。
import java.io.*;
public class Solution{
public static void main(String[] args) throws IOException
{
//Input
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int T = Integer.parseInt(br.readLine());
int[] N = new int[T];
for(int t = 0; t < T; N[t++] = Integer.parseInt(br.readLine())){
}
br.close();
br = null;
//Solve
long[] V = new long[T];
for(int t = 0; t < T; ++t){
int n = N[t] - 1;
V[t] = 3*nSum(n/3) + 5*nSum(n/5) - 15*nSum(n/15);
}
//Print
StringBuilder sb = new StringBuilder();
for(int t = 0; t < T; sb.append(V[t++]).append("\n")){
}
System.out.print(sb);
}
public static long nSum(int n){
long v = n;
return (v*v + v) >> 1;
}
}
我的 php 代码也有同样的问题,我使用 return 而不是回显你的情况,用 return 替换 sout