gpt4 book ai didi

java - 查找代码不起作用的测试用例

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:50:21 24 4
gpt4 key购买 nike

我在 code chef 中提交了一个代码,但它给出了错误的答案,即使它是正确的谁能帮我识别一下。我尝试了很多输入并手动计算,它们都是正确的,所以为什么他们给了我错误的答案。那么,谁能找到通过这段代码给出错误输出的测试用例?

这是问题定义。 Code definition

import java.util.Scanner;
import java.lang.Math;
class Codechef {

static int get(int n,int i,int digit)
{
int p;
p=(int)Math.pow(10,i-1);
n=n/p;
return n%10;
}

static boolean check_pal(int n)
{
int digit;
digit=(int) (Math.log10(n)+1);
int a=0,b=0,i,j,p;
int sum=0;

for(i=1,j=digit-1 ; i<=digit ; i++,j-- )
{
a=get(n,i,digit);
sum+=a*Math.pow(10,j);
}

if(sum==n)
return true;
else
return false;
}

static int reverse(int n)
{
int digit;
digit=(int) (Math.log10(n)+1);
int a=0,b=0,i,j,p;
int sum=0;

for(i=1,j=digit-1 ; i<=digit ; i++,j-- )
{
a=get(n,i,digit);
sum+=a*Math.pow(10,j);
}

return n+sum;
}

public static void main(String[] args) {
try{
Scanner sc=new Scanner(System.in);
int n=sc.nextInt();

if(n<10 || n>999){
System.out.println("NONE");
return;
}

boolean c;
for(int i=1 ; i<=100 ; i++)
{
c=check_pal(n);
if(c==true)
{
System.out.println(n);
return;
}
n=reverse(n);
}
System.out.println("NONE");
}
catch(Exception e)
{
System.out.println("NONE");
}
}
}

这是另一个输出。对于 99,它给出 99,这是正确的,因为它是回文。 for 99

最佳答案

对于 89(或 98),您的代码返回“NONE”,尽管您仅在 24 步后得到答案 8813200023188。

另一种情况是对于 177 和 276 你应该得到 8836886388 而不是 NONE

我没有调试您的代码,我只是编写了一个执行相同操作的程序,并将我的程序给出的输出与您的程序给出的输出进行比较。由于您只是请求了一个测试用例,这就足够了 :) 我的直觉是您溢出了……int 不够大,无法容纳所有情况下的答案。

快乐的 bug 搜索。

使用我的代码编辑(应要求)。

我没有更改您的代码,只是将您的逻辑提取到 getResult(integer) 方法中,这样我就可以绕过输入扫描并简单地返回一个字符串作为结果。它打印出我们版本之间的所有差异。我使用 BigInteger 作为保存结果的类型。

public class Main {

public static void main(String[] args) {
Main m = new Main();
for (int i=10; i < 1000; i++) {
String myResult = null;
String hisResult = null;
try {
myResult = m.getResultAsString(i);
} catch (Exception e){
System.out.println("Your code threw an exception for " + i);
}
try{
hisResult = Codechef.getResult(i);
} catch (Exception e){
System.out.println("His code threw an exception for " + i);
}
if (myResult != null && hisResult != null && ! myResult.equals(hisResult)) {
System.out.println("For " + i + " you have " + myResult + " but he has " + hisResult);
}
}
}

public String getResultAsString(int inputNumber) {
BigInteger res = getResultAsBigInteger(new BigInteger(""+inputNumber));
if (res != null) {
return res.toString();
} else {
return "NONE";
}

}

public BigInteger getResultAsBigInteger(BigInteger inputNumber) {
int numberOfSteps = 0;
BigInteger currentValue = inputNumber;
while (numberOfSteps < 101 && ! isPalindrome(currentValue)) {
numberOfSteps++;
currentValue = currentValue.add(reverseDigits(currentValue));
}
return numberOfSteps < 101 ? currentValue : null;
}

public boolean isPalindrome(BigInteger number) {
return number.equals(reverseDigits(number));
}

public BigInteger reverseDigits(BigInteger input) {
String inputString = input.toString();
String output = "";
for (int i = inputString.length() - 1; i >= 0; i--)
{
output += inputString.charAt(i);
}
return new BigInteger(output);
}

关于java - 查找代码不起作用的测试用例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19888477/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com