检查一系列数字的可分性而不重复数字

时间:2017-02-11 12:58:22

标签: java

我编写了以下程序来计算可被12整除但不包含数字重复的数字。例如。即使数字可被12整除,也不考虑数字144,因为存在数字4的重复。问题是我没有输出。我尝试将for循环的范围从12 ... 54321更改为12 ... 1000甚至12 ... 24。我仍然没有输出。我似乎无法找到问题所在。有人可以告诉我我的代码有什么问题。或者只是建议我一个更好的代码/解决问题的方法。感谢...

class mod12
{
    public static void main(String[] args)
    {
        int count=0;
        for(int num=12;num<=54321;num+=12)
        {
            boolean repetition=false;
            int digits[]=new int[10];
            int length=0;
            while (num!=0)
            {
                digits[length++]=num%10;
                num=num/10;
            }
            for(int i=0; i<length; i++)
            {
                for(int j=0; j<length; j++)
                {
                    if(i!=j)
                    {
                        if(digits[i]==digits[j])
                        {
                            repetition=true;
                            break;
                        }
                    }
                }
            }

            if(repetition==false)
            {count++;}
        }
        System.out.println("There are "+count+" numbers satisfying the condition");
    }
}

1 个答案:

答案 0 :(得分:0)

在while循环中,减少num,有效地向后移动for循环,因此它永远不会完成。使用临时变量可以解决问题:

public static void main(String[] args)
{
    int count=0;
    for(int num=12;num<=54321;num+=12)
    {
        boolean repetition=false;
        int digits[]=new int[10];
        int length=0;
        int tempNum = num; // Here
        while (tempNum !=0)
        {
            digits[length++]=tempNum %10;
            tempNum =tempNum /10;
        }
        for(int i=0; i<length; i++)
        {
            for(int j=0; j<length; j++)
            {
                if(i!=j)
                {
                    if(digits[i]==digits[j])
                    {
                        repetition=true;
                        break;
                    }
                }
            }
        }

        if(repetition==false)
        {count++;}
    }
    System.out.println("There are "+count+" numbers satisfying the condition");
}

修改:
无论原始问题如何,请注意,使用Set跟踪数字可以大大缩短代码:

public static void main(String[] args) {
    int count = 0;
    NUMBERS:
    for (int num = 12; num <= 54321; num += 12) {
        Set<Integer> digits = new HashSet<>();
        int tempNum = num;
        while (tempNum != 0) {
            int digit = tempNum % 10;
            if (!digits.add(digit)) {
                continue NUMBERS;
            }
            tempNum = tempNum / 10;
        }
        ++count;
    }
    System.out.println("There are "+count+" numbers satisfying the condition");
}