题目如下图:
实现代码:
import java.util.*;
import java.util.logging.Logger;
public class DivisionByThreeNumber {
public static final Logger logger = Logger.getGlobal();
public static void main(String[] args) {
division();
}
private static void division() {
// 输入数值范围
final int minRange = 1;
final int maxRange = (int) Math.pow(10, 9);
// 查询范围
final int resMin = 1;
final int resMax = (int) (Math.pow(10, 9) * 2);
// 数值初始化
int n = 0, i = 0, o = 0, p = 0;
logger.info("输入您需要查找的位置,三个除数i,o,p 。以半角逗号分隔");
Scanner scanner = new Scanner(System.in);
String input = scanner.next();
scanner.close();
// 获取输入的各变量值
String[] split = input.split(",");
n = Integer.valueOf(split[0]);
i = Integer.valueOf(split[1]);
o = Integer.valueOf(split[2]);
p = Integer.valueOf(split[3]);
// 排序求最小数,即可被除数的第一个数
List<Integer> list = new ArrayList<>();
list.add(n);
list.add(i);
list.add(o);
list.add(p);
// 校验数值范围
{
for (int in : list) {
if (minRange >= in || in >= maxRange) {
logger.warning("不在查找范围");
return;
}
}
if (1 >= i * o * p || i * o * p > Math.pow(10, 18)) {
logger.warning("不在查找范围");
return;
}
}
list.remove(Integer.valueOf(n));
list.sort(Comparator.comparingInt(Integer::intValue));
int min = list.get(0);
// 要查找的第n个被除数
Integer nVal = null;
// 开始查找
{
int count = 0;
while (min <= resMax) {
if (count == n) {
nVal = min - 1;
break;
}
if (min % i == 0 || min % o == 0 || min % p == 0) {
count++;
}
min++;
}
}
logger.info("您查找的第 " + n + " 个满足被除条件的数是:" + nVal);
}
}
效果: