Dies ist in Bezug auf das Problem Sherlock And Counting. https://www.hackerrank.com/challenges/sherlock-and-countingSherlock und Counting werden nicht von HackerRank akzeptiert
Ich habe Diffchecker verwendet, um Tausende von Ergebnissen, die mein Code produziert hat, mit den Ergebnissen zu vergleichen, die ich mit meinen Hackos gekauft habe. Sie sind gleich! Mein Code ist fehlerhaft, obwohl meine Ergebnisse die gleichen sind wie bei den Hackos.
Ich habe den Diffchecker-Link entfernt, weil er zu groß ist und die Registerkarte einfriert, aber ich habe die ersten 2000 Ergebnisse getestet und meine Ergebnisse sind die gleichen wie die mit den Hackos gekauften Ergebnisse. Einfach gesagt, kann ich nicht verstehen, warum Hackerrank meinen Code nicht akzeptiert? Sie können versuchen, diesen Code einzugeben und bemerken, dass Sie tatsächlich die gleichen Ergebnisse wie die Testfälle erhalten (mit den Hackos gekauft), aber irgendwie akzeptiert es es nicht?
import java.io.*;
import java.util.*;
import java.math.*;
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. */
Scanner in = new Scanner(System.in);
int testcases = in.nextInt();
/* Each individual test case */
for(int index = 0; index < testcases; ++index)
{
long N = in.nextLong();
long K = in.nextLong();
/* Notice that we require i < N and i to be a positive integer.
This is impossible if N == 1. Therefore, a simple test solves
a big issue. */
if(N <= 1){
System.out.println(0);
}
/* Test if discriminant is negative. If it is, the number of
integers is N - 1 because every number fits under the graph. */
else if(N*N - 4*N*K < 0)
{
System.out.println(N - 1);
}
/* Notice if the discriminant is zero, then necessarily
N = 4 * K. In an alternate form, the quadratic will be
written as i^2 - Ni + N^2/4, also recognized as (i - N/2)^2.
Therefore, the answer is N - 2. */
else if (N*N - 4*N*K == 0)
{
System.out.println(N - 1);
}
/* Test if discriminant is positive. If it is, the number of
integers depends on the locus of solutions. */
else if(N*N - 4*N*K > 0)
{
long solnOne = (long) (N + Math.sqrt(N*N - 4*N*K))/2;
long solnTwo = (long) (N - Math.sqrt(N*N - 4*N*K))/2;
if(solnOne > solnTwo){
long temp = solnOne;
solnOne = solnTwo;
solnTwo = temp;
}
long LeftBound = (long) solnOne;
long RightBound = (long) solnTwo + 1;
/* Now there may be possibilities such that the left solution
is less than one and/or the right solution is greater than or equal
to the bound. We must account for these possibilities. */
/* Here, both bounds are unacceptable. Therefore, there is no
solution. */
if(LeftBound < 1 && RightBound >= N)
{
System.out.println(0);
}
/* Here, only the right bound is acceptable. */
else if(LeftBound < 1)
{
System.out.println(N - RightBound);
}
/* Here, only the left bound is acceptable. */
else if(RightBound >= N)
{
System.out.println(LeftBound);
}
/* Both bounds are allowed! */
else
{
System.out.println(N - RightBound + LeftBound);
}
}
}
}
}
Sie haben Recht. Für das 'rightBound' habe ich nicht überprüft, ob es sich tatsächlich mit der X-Achse schneiden könnte. –
Ich habe alles gemacht, was du vorgeschlagen hast und jetzt bekomme ich 6 für meine Antwort. Meine Testfälle schlagen jedoch immer noch fehl. Sendet ich in diesem Kommentar ein neues Snippet, aktualisiere ich den Code-Inhalt des OP oder ersetze ich den Code-Inhalt des OPs? –
@MathApprentice * Sie * sind das OP (Original Poster) der Frage. Ich bin der OP von * dieser * Antwort. Du siehst also, dein Kommentar ist ein bisschen komisch. ;-) Wenn meine Antwort Ihnen geholfen hat, sollten Sie auf den Pfeil nach oben klicken (Tooltip: Diese Antwort ist nützlich). Wenn meine Antwort Ihr Problem gelöst hat, sollten Sie es einfach akzeptieren, indem Sie auf das Häkchen klicken und anderen zeigen, dass Ihre Frage zu Ihrer Zufriedenheit beantwortet wurde. Wenn Sie die Frage geklärt haben, bearbeiten Sie sie. Wenn Sie eine andere Frage haben, erstellen Sie eine neue Frage. Wenn Sie nicht glauben, dass diese Frage anderen hilft, löschen Sie sie einfach. – Andreas