确定数字(n)的因子,然后返回可能的正整数对,当它们相乘时小于(n)?

时间:2017-03-16 04:05:17

标签: java for-loop while-loop factors

基本上,指示如下:

  1. 输入大于3(n)的正整数
  2. 程序应该打印所有可能的大于1的正整数对,其乘积为< =输入的数字(n)
  3. 以下是示例输出:

    Enter an integer: 24
    4 = 2 x 2
    6 = 2 x 3
    8 = 2 x 4
    10 = 2 x 5
    12 = 2 x 6
    14 = 2 x 7
    16  = 2 x 8
    18 =  2 x 9
    22 = 2 x 11
    24 = 2 x 12
    9 = 3 x 3
    12 =  3 x 4
    15 = 3 x 5
    18 = 3 x 6
    21 = 3 x 7
    24 = 3 x 8
    16 = 4 x 4
    20 = 4 x 5
    24 = 4 x 6
    

    (注意:产品可以出现多次,但不应出现对)

    对于我的解决方案,我首先确定了n的因素:

     public static void main(String[] args){
            Scanner keyboard = new Scanner(System.in);
            int factors = 0;
    
            System.out.println("Enter integer:");
            int n = keyboard.nextInt();
    
                for(int i = 2; i <=n ; i++) {
                    if(n % i == 0) {
                        System.out.println(i);
                      }
                   }
    

    从那里开始,似乎我应该拉出每个因子并将其乘以从2开始的递增变量,直到它等于或超过(n)。我开始的事情可能这是不正确的,所以我尝试了这样的事情:

        Scanner keyboard = new Scanner(System.in);
    
        System.out.println("Enter integer:");
        int n = keyboard.nextInt();
    
        int index = 2;
        int multiplier = 2;
        int result = 0;
        while(result < n) {
            result = multiplier * index;
            System.out.println(result);
            index++;
        }
    

    哪个有效,但仅适用于result 4 - 24,因为乘数从不增加两个3.实际解决方案是否只是这些可能解决方案的混合?非常感谢指导,谢谢!

2 个答案:

答案 0 :(得分:2)

我认为你当前的方法是关闭的,特别是缺少解决这个问题的一个关键因素:双循环。我认为最简单的方法是循环两次并生成满足要求的所有对。

int number = 24;

for (int i=2; i < (int)Math.ceil(Math.sqrt(number)); ++i) {
    for (int j=i; j <= number / 2; ++j) {
        int pair = i * j;
        if (pair <= number) {
            System.out.println(pair + " = " + i + " x " + j);
        }
    }
}

这里棘手的部分是确定两个for循环的界限。第二个循环变量以第一个循环变量的值开始,并且可以达到输入数量的一半。这是因为当第一个数字为2时会出现最宽的一对,迫使第二个数字为输入减半。第一个循环的边界有点复杂。我们使用平方根的上限作为界限,因为当两个数字相同时,它会发生的最大值。

答案 1 :(得分:0)

尝试这样的事情。

    Scanner keyboard = new Scanner(System.in);

    System.out.print("Enter integer: ");
    int n = keyboard.nextInt();

    for (int i = 2; i <= n / 2; i++) {
        for (int j = 2; i * j <= n; j++) {
            System.out.println(i + " x " + j + " = " + (i * j));
        }
    }

结果如下。

Enter integer: 24
2 x 2 = 4
2 x 3 = 6
2 x 4 = 8
2 x 5 = 10
2 x 6 = 12
2 x 7 = 14
2 x 8 = 16
2 x 9 = 18
2 x 10 = 20
2 x 11 = 22
2 x 12 = 24
3 x 2 = 6
3 x 3 = 9
3 x 4 = 12
3 x 5 = 15
3 x 6 = 18
3 x 7 = 21
3 x 8 = 24
4 x 2 = 8
4 x 3 = 12
4 x 4 = 16
4 x 5 = 20
4 x 6 = 24
5 x 2 = 10
5 x 3 = 15
5 x 4 = 20
6 x 2 = 12
6 x 3 = 18
6 x 4 = 24
7 x 2 = 14
7 x 3 = 21
8 x 2 = 16
8 x 3 = 24
9 x 2 = 18
10 x 2 = 20
11 x 2 = 22
12 x 2 = 24