被3整除

被3整除

题目如下:

题目描述
小Q得到一个神奇的数列: 1, 12, 123,...123456789..。
并且小Q对于能否被3整除这个性质很感兴趣。
小Q现在希望你能帮他计算一下从数列的第l个到第r个(包含端点)有多少个数可以被3整除。
输入描述:
输入包括两个整数l和r(1 <= l <= r <= 1e9), 表示要求解的区间两端。
输出描述:
输出一个整数, 表示区间内能被3整除的数字个数。
说明
12, 123, 1234, 12345...
其中12, 123, 12345能被3整除。

解题思路

这个题目有一个非常笨的办法,可以遍历出数字然后判断当前数字是否被三整除
另外一种解法需要找规律:
第i 个数字   :1 2 3 4 5 6 7 8 9 10 ... i
可被3整除   :0 1 1 0 1 1 0 1 1 0 .....   (0表示不能,1表示能)
规律编序     :0 1 2 0 1 2 0 1 2 0 ......  (规律已成,0下表不能被整除,1,2下标能)
每间隔3循环一遍,设起始下标为M,终点下标为N,
当M被3整除的时候,M包含 m/3 *2 个能被3整除的数字
当M除3余2的时候,M包含 m/3 *2+1 个能被3整除的数字
当M除3余1的时候,M包含 m/3 *2 个能被3整除的数字
最终的结果用get3(n) -get3(m-1)

Python代码

# encoding=utf-8
import sys
def get3(n):
    count = int(n /3) * 2 
    if n%3 == 2 :
        count = count+1
    return count

if __name__ == '__main__':
    start, end = map(int, input().split())
    print(get3(end)-get3(start-1))

java代码

import java.io.*;
import java.util.Scanner;

public class Main {

    public static void main(String [] args) throws IOException{
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        int m = sc.nextInt();
        int count = get3(m) - get3(n-1);
        System.out.println(count);
    }

    public static int get3(int n){
        int count = n / 3 * 2 ;
        if (n%3 == 2 )
            count = count +1 ;
        return count;
    }
}

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值