基本上,指示如下:
以下是示例输出:
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.实际解决方案是否只是这些可能解决方案的混合?非常感谢指导,谢谢!
答案 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