题目
小Q得到一个神奇的数列: 1, 12, 123,…12345678910,1234567891011…。
并且小Q对于能否被3整除这个性质很感兴趣。
小Q现在希望你能帮他计算一下从数列的第l个到第r个(包含端点)有多少个数可以被3整除。
输入描述:
输入包括两个整数l和r(1 <= l <= r <= 1e9), 表示要求解的区间两端。
输出描述:
输出一个整数, 表示区间内能被3整除的数字个数。
输入例子1:
2 5
输出例子1:
3
例子说明1:
12, 123, 1234, 12345…
其中12, 123, 12345能被3整除。
代码
因为时间复杂度太高,只能通过50%的测试用例
这段代码的输出不是严格按照题目来的,为了方便理解,又画蛇添足了一下
按照题目要求的话,直接输出spaceFlag
即可
#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
using namespace std;
int main()
{
long int curNum = 1;
int lastMin;
int lastMax;
if (scanf("%d %d", &lastMin, &lastMax) == EOF)
{
cout << endl;
return 0;
}
int j;
int jTemp;
int sum = 0;
int spaceFlag = 0;
//统计总数
for (curNum = lastMin; curNum <= lastMax; curNum++)
{
sum = 0;
for (j = 1; j <= curNum; j++)
{
//cout << j;
//在线余3防止溢出
jTemp = j;
jTemp %= 3;
sum += jTemp;
sum %= 3;
}
if (sum == 0)//如果能被3整除 flag++
{
spaceFlag++;
}
}
cout << "一共" << spaceFlag++ << "个数" << endl;//歪打正着
//逐个输出
for (curNum = lastMin; curNum <= lastMax; curNum++)
{
sum = 0;
for (j = 1; j <= curNum; j++)
{
//cout << j;
//在线余3防止溢出
jTemp = j;
jTemp %= 3;
sum += jTemp;
sum %= 3;
}
if (sum == 0)//如果能被3整除 输出
{
spaceFlag--;
for (j = 1; j <= curNum; j++)
{
cout << j;
}
if (spaceFlag != 0)cout << endl;
}
}
system("pause");
return 0;
}
运行效果
1 50
一共33个数
12
123
12345
123456
12345678
123456789
1234567891011
123456789101112
1234567891011121314
123456789101112131415
1234567891011121314151617
123456789101112131415161718
1234567891011121314151617181920
123456789101112131415161718192021
1234567891011121314151617181920212223
123456789101112131415161718192021222324
1234567891011121314151617181920212223242526
123456789101112131415161718192021222324252627
1234567891011121314151617181920212223242526272829
123456789101112131415161718192021222324252627282930
1234567891011121314151617181920212223242526272829303132
123456789101112131415161718192021222324252627282930313233
1234567891011121314151617181920212223242526272829303132333435
123456789101112131415161718192021222324252627282930313233343536
1234567891011121314151617181920212223242526272829303132333435363738
123456789101112131415161718192021222324252627282930313233343536373839
1234567891011121314151617181920212223242526272829303132333435363738394041
123456789101112131415161718192021222324252627282930313233343536373839404142
1234567891011121314151617181920212223242526272829303132333435363738394041424344
123456789101112131415161718192021222324252627282930313233343536373839404142434445
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
请按任意键继续. . .