给我们一个范围A
我的解决方案:
import java.util.Scanner;
class ABC {
public static void main(String args[] ) throws Exception {
Scanner sc = new Scanner(System.in);
int N = sc.nextInt();
for (int i = 0; i < N; i++) {
long A = sc.nextLong();
long B = sc.nextLong();
long M = sc.nextLong();
int res = 0;
while(A<=B)
{
if(A%M==0)res++;
A++;
}
System.out.println(res+"");
}
}
}
现在这不是很有效。请告诉我如何在最少的时间内解决此问题。
最佳答案
以下应该这样做(经过更多测试之后)。
int r = (b/m - a/m) + (a % m == 0 ? 1 : 0);
说明
查找
m
和a/m
之间的倍数b/m
如果
a
是m
的倍数,请再添加一个(a % m == 0 ? 1 : 0)
PoC的小例子
public static void main(String[] args) throws Exception {
int[][] pairs = {{10, 24}, {10, 25}, {11, 24}, {11, 25}, {10, 27}};
int m = 5;
for (int[] pair : pairs) {
int a = pair[0];
int b = pair[1];
int r = (b/m - a/m) + (a % m == 0 ? 1 : 0);
System.out.printf("a: %d b: %d result = %d ", a, b, r);
for (int i = a; i <= b; i++) {
if (i % m == 0) {
System.out.print(" " + i);
}
}
System.out.println("");
}
}
输出
a: 10 b: 24 result = 3 10 15 20
a: 10 b: 25 result = 4 10 15 20 25
a: 11 b: 24 result = 2 15 20
a: 11 b: 25 result = 3 15 20 25
a: 10 b: 27 result = 4 10 15 20 25
关于java - 查找范围之间的数字的倍数[Java],我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31870932/