给我们一个范围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);


说明


查找ma/m之间的倍数b/m
如果am的倍数,请再添加一个(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/

10-10 10:40