被三整除(2019校招)

题目链接:

https://www.nowcoder.com/practice/51dcb4eef6004f6f8f44d927463ad5e8?tpId=98&tqId=32825&tPage=1&rp=1&ru=%2Fta%2F2019test&qru=%2Fta%2F2019test%2Fquestion-ranking

题目描述

小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整除。

分析:

 1 // 一个数如果能被三整除那么其每一位相加和为3的倍数
 2 // 算出1+2+...+l = sum,判断sum是否为3的倍数
 3 // 并继续sum加l+1,加l+2一直到r,依次判断sum是否为3的倍数即可
 4 
 5 #include <bits/stdc++.h>
 6 using namespace std;
 7 
 8 int main()
 9 {
10     int l, r; // l,r
11     while (scanf("%d%d", &l, &r) != EOF)
12     {
13         int sum = 0, count = 0; 
14         for (int i = 1; i < l; i++) // sum = 1+2+...+l-1
15             sum += i; 
16         for (int i = l; i <= r; i++) // sum = sum + l, +l+1, +....+r
17         {
18             sum += i;
19             if (!(sum % 3)) // 判断sum是否为3的倍数
20                 count++;
21         }
22         printf("%d\n", count);
23     }
24     return 0;
25 }

 

https://www.nowcoder.com/practice/51dcb4eef6004f6f8f44d927463ad5e8?tpId=98&tqId=32825&tPage=1&rp=1&ru=%2Fta%2F2019test&qru=%2Fta%2F2019test%2Fquestion-ranking

posted @ 2020-03-23 16:33  sqdtss  阅读(261)  评论(0编辑  收藏  举报