java查询未通过测试用例

时间:2016-11-13 05:05:48

标签: java eclipse algorithm

这就是问题:

  

DoSoD编号是数字和的除数。例如,如果你采取   数字12,其数字之和为1 + 2 = 3.12可被3整除   因此它是一个DoSoD号码。按照同样的理由,11不是一个   DoSoD号码,但最接近11的DoSoD号码是12.写一个   将整数n作为输入并打印DoSoD的程序   最接近但不小于n的数字。样本输入-1 16预期   输出18样本输入-2 2预期输出20

这是我的代码:

class Dosod{
    public static void main(String args[]){
        Scanner s=new Scanner(System.in);
        int n=s.nextInt();
        int temp=0,x;
        x=n;
        int y=n;
        while(n>0){
            x=n%10;
            temp+=x;
            n=n/10;
        }
        if(y%temp==0){
             System.out.print(y);
        }else if(y%temp!=0){
           y=y+2;
            System.out.println(y);
        }


    }
}

但它没有通过测试用例。可以有人帮忙吗?

2 个答案:

答案 0 :(得分:0)

您需要更新您的其他分支。您最近的号码可以是当前号码的前进或后退。但由于问题陈述明确表示最接近的值应大于输入值。您可以编写一个简单的while循环,它会增加输入值,直到值mod sumOfDigits为0。

public static void main(String args[]) {
        Scanner s = new Scanner(System.in);
        int n = s.nextInt();
        int y = n;
        int temp = 0;       
        temp = sumOfDigits(n);

        if (y % temp == 0) {
            System.out.print(y);
        } 
        else
        {
            int yforward = y+1;

            while(yforward % sumOfDigits(yforward) !=0)
                yforward++;

            System.out.println(yforward);
        }


    }

    static int sumOfDigits(int n)
    {
        int temp = 0;
        while (n > 0) {
            int x = n % 10;
            temp += x;
            n = n / 10;
        }

        return temp;
    }

答案 1 :(得分:0)

正如@Inan所提​​到的,你需要更新你的其他分支,但你也可以只用一段statement来改善流量控制,它非常清晰,绝对更优雅。还添加了另一种方法来对您的研究案例中的数字求和。另外,如果您在需要时“询问”输入,那么很好,因此用户可以看到正在发生的事情。最后但并非不那么重要(如果我太严格,我很抱歉)如果您的变量名称具有代表性,这是一个很好的做法,这种方式对于程序员来说更具可读性。即int inputNumber = s.nextInt();

Dosod:

class Dosod{
    public static void main(String args[]) {
        System.out.print ( "Please enter a number: " );
        Scanner s = new Scanner(System.in);

        int inputNumber = s.nextInt();        

        while ( inputNumber % sumOfDigits ( inputNumber ) != 0 )
        {
            inputNumber++;
        }
        System.out.println ( "dosod: " + inputNumber );

    }

    static int sumOfDigits(int number)
    {
        String digits = new Integer(number).toString();
        int sum = 0;
        for (char c: digits.toCharArray())
            sum += c - '0';
        return sum;
    }
}

输入/输出示例:

Please enter a number: 19
Dosod: 20
Please enter a number: 12
Dosod: 12
Please enter a number: 37
Dosod: 40

工作流:

如果您仍有任何疑问,请查看此工作流程:

workflow

文件:

Naming Conventions (archived)

Control Flow Statements