题目描述
给你两个正整数L, R, 然后把L到R之间的数连起来形成一个新的数x。判断x是不是3的倍数。
例如:L = 2, R = 4, 则 x = 234; L = 10, R =12, x = 101112.
样例
输入:
3
2 4
2 2
3 5
输出:
YES
NO
YES
思路:
首先条件“是否为3的倍数”等价于“各数之和是否为3的倍数”
由此可以解:新数字的各位数之和为L到R之间所有数的和
转化为L到R之间所有数之和是否为3的倍数
等差数列公式:(n*(a1+an))/2;
利用等差数列求和公式(L+R) * (R-L+1)/2,即判断L+R或者个数L+R-1是否为3的倍数
C++ 代码
#include<iostream>
#include<cstring>
#include<algorithm>
#include<set>
#include<vector>
int main()
{
long long T,L,R,num1,num2;
scanf("%lld",&T);
for(int n=1;n<=T;n++)
{
scanf("%lld%lld",&L,&R);
num1=L+R;//首项加尾项
num2=R-L+1;//等差数列的个数
if(num1%3==0||num2%3==0)
printf("YES\n");
else
printf("NO\n");
}
return 0;
}