首页 > 试题广场 >

被3整除

[编程题]被3整除
  • 热度指数:2801 时间限制: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整除。

F1

T12

T123

F1234

T12345

T123456

F1234567

T12345678

T123456789

F12345678910

T1234567891011

T123456789101112

1 4 7 10 13  不行

import java.util.Scanner;
public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int sNum = sc.nextInt();
        int count = 0;
        int eNum = sc.nextInt();
        int num = eNum-sNum+1;
        for (int i=sNum;i<=eNum;i++){
            if(i%3-1==0){
                count++;
            }
        }
        System.out.println(num-count);
    }
}

 

发表于 2019-08-24 16:26:26 回复(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();

        int res = 0;
        for (int i = l; i <= r; ++i) {
            if (i % 3 == 0 || (i + 1) % 3 == 0) {
                ++res;
            }
        }
        System.out.println(res);
        scanner.close();
    }
}
编辑于 2018-09-08 09:36:59 回复(0)
仔细审题有规律:即假设1代表不能被3整除,0代表可以,则规律可表示为100100100100……

import java.util.*;
 
public class Main{
    public static void main(String[] args){
        Scanner scanner = new Scanner(System.in);
        int left = scanner.nextInt();
        int right = scanner.nextInt();
        if(left>right)
            return ;
        int result = (right-left+1)/3*2;
        int mod = (right-left+1)%3;
        if(mod == 1){
            if(left%3 != 1) result += 1;
        }
        else if(mod == 2){
            if(left%3 == 2) result += 2;
            else result += 1;
        }
        System.out.println(result);
    }
}

发表于 2018-06-11 11:56:49 回复(0)
我这个在eclipse中运行时对的,为什么在这编译出错?
public class Main {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
      Scanner input = new Scanner(System.in);
      long l= input.nextInt();
      long r= input.nextInt();
      if(l>=1 && r<=1e9)
      {
          long temp;
          long begin=0;
          long over=0;
          int count=0;
          for(;l!=0;l--)
          {
              temp=begin+1;
              begin=begin*10+temp;
          }
          for(;r!=0;r--)
          {
              temp=over+1;
              over=over*10+temp;
          }
          for(;begin<=over;)
          {
              if(begin%3==0)
              {
                  count++;
              }
              long x=begin%10+1;
              begin=begin*10+x;
          }
          System.out.println(count);
      }
    }

}
发表于 2018-06-06 21:19:17 回复(0)