首页 > 试题广场 >

被3整除

[编程题]被3整除
  • 热度指数:232 时间限制: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整除。
#include <iostream>
using namespace std;
 
int main() {
    long long l, r;
    cin >> l >> r;
 
    int count = 0;
    for (long long  j = l; j <= r; j++) {
        if (j%3==0||j%3==2) {
            count++;
        }
    }
    cout << count << endl;
    return 0;
}


发表于 2019-08-07 23:50:36 回复(0)
等差数列求和
#include <iostream>
using namespace std;
int main(){
    long long l, r;
    cin >> l >> r;
    long long sum = (l-1) + (l-1)*(l - 2) / 2;
    long long cnt = 0;
    for (long long i = l; i <= r; i++) {
        sum += i;
        if (sum % 3 == 0) {
            cnt++;
        }
    }
    cout << cnt << endl;
    return 0;
}
发表于 2020-03-23 01:54:22 回复(0)
import java.util.Scanner;

public class Main {
public static void main(String[] args) {


Scanner scanner = new Scanner(System.in);
int l = scanner.nextInt();
int r = scanner.nextInt();
System.out.println(function(r)-function(l-1));
}

private static int function(int x) {
return x / 3 * 2 + (x % 3 == 0 ? 0 : x % 3 == 1 ? 0 : 1);
}
}

通过所有测试用例
编辑于 2019-04-07 00:36:31 回复(0)
办法有点笨,但是应该很好看懂

#include<stdio.h>
intmain()
{
    longintl,r,num=0,total=0;
    scanf("%ld %ld",&l,&r);
    for(longinti=l;i<=r;i++)
    {
    num=0;
    for(longintj=1;j<=i;j++)
    {
    num+=j;
    }
    if(num%3==0 &&num!=0)
    total++;
    }
    printf("%ld",total);
}
发表于 2019-04-06 16:51:29 回复(0)