确定一个数 (n) 的因数,然后 return 可能的正整数对相乘时小于 (n)?
Determine factors of a number (n), then return possible pairs of positive integers that when multiplied together are less than (n)?
基本上,方向是这样的:
- 请输入大于 3 (n) 的正整数
- 程序应打印所有可能的正整数对,这些正整数大于其乘积 <= 输入的数字 (n)
这是一个示例输出:
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
,因为乘数永远不会递增 2 3. 实际解决方案是否只是这些可能解决方案的混合体?不胜感激,谢谢!
我认为您当前的方法是错误的,尤其是缺少解决此问题的一个关键要素:双循环。我认为最简单的处理方法是循环两次并生成所有符合要求的对。
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
时,将出现最宽的对,迫使第二个数字成为输入的一半。第一个循环的边界有点复杂。我们使用平方根的上限作为界限,因为当两个数字相同时,它可能会达到最大。
尝试这样的事情。
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
基本上,方向是这样的:
- 请输入大于 3 (n) 的正整数
- 程序应打印所有可能的正整数对,这些正整数大于其乘积 <= 输入的数字 (n)
这是一个示例输出:
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
,因为乘数永远不会递增 2 3. 实际解决方案是否只是这些可能解决方案的混合体?不胜感激,谢谢!
我认为您当前的方法是错误的,尤其是缺少解决此问题的一个关键要素:双循环。我认为最简单的处理方法是循环两次并生成所有符合要求的对。
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
时,将出现最宽的对,迫使第二个数字成为输入的一半。第一个循环的边界有点复杂。我们使用平方根的上限作为界限,因为当两个数字相同时,它可能会达到最大。
尝试这样的事情。
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