首页 > 试题广场 >

被3整除

[编程题]被3整除
  • 热度指数:312 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M
  • 算法知识视频讲解

小Q得到一个神奇的数列: 1, 12, 123,...12345678910,1234567891011...。

并且小Q对于能否被3整除这个性质很感兴趣。

小Q现在希望你能帮他计算一下从数列的第l个到第r个(包含端点)有多少个数可以被3整除。


输入描述:
输入包括两个整数l和r(1 <= l <= r <= 1e9), 表示要求解的区间两端。


输出描述:
输出一个整数, 表示区间内能被3整除的数字个数。
示例1

输入

2 5

输出

3

说明

12, 123, 1234, 12345...
其中12, 123, 12345能被3整除。
import java.util.Scanner;
 
public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        while (sc.hasNext()) {
            int l = sc.nextInt();
            int r = sc.nextInt();
            System.out.println(divide3(l, r));
        }
    }
     
    private static long divide3(long l, long r) {
        long result = 0, sum = 0;
        for (long i = 1; i < l; i++) {
            sum += i;
        }
        for (long i = l; i <= r; i++) {
            sum = (sum + i) % 3;
            if (sum % 3 == 0) {
                result++;
            }
        }
        return result;
    }
}

发表于 2018-08-09 22:06:18 回复(0)
l,r=map(int,input().split())
t=(r-l+1)%3#每3个数中2个能被3整除,找到共多少3个后处理r的余数即可
count=(r-l+1)//3*2 
if t!=0:  count=count+(r-1)%3
print(count)


编辑于 2019-03-31 18:44:55 回复(1)
a = input()
l = int(a.split(" ")[0]) r = int(a.split(" ")[1]) sum = 0
p = int((r - l) / 9) count = p * 6
for i in range((l % 9) + 1):
sum = sum + i
for i in range((r - l) % 9 + 1):
if(sum % 3 == 0):
count += 1
 
sum = sum + (l % 9) + i + 1
print(count)

编辑于 2018-06-14 09:25:48 回复(0)