题解【被3整除】

被3整除

http://www.nowcoder.com/questionTerminal/51dcb4eef6004f6f8f44d927463ad5e8

来看我们的序列,1,12,123,1234,12345......

我们会发现第最终的答案序列模3的余数为,1,0,0,1,0,0......

所以答案就是这个了

#include<cstdio>
#include<iostream>
using namespace std;
int l,r;
int main()
{
    scanf("%d%d",%l,%r);--l;
    int ans1=r/3*2+((r%3)>1);
    int ans2=l/3*2+((l%3)>1);
    return printf("%d",ans1-ans2),0;
}

不过为什么呢?

众所周知,能被3整除的数所有位数之和是3的倍数

我们每次在序列末尾加上一个数x,实际上是对原序列的数位之和加上x的数位之和

所以答案序列模3的余数就是1,2,0,1,2,0,1,2,0......的前缀和

既是1,0,0,1,0,0,1,0,0.........

全部评论
就这个代码,在自己的IDE上可以通过,牛客网上过不了
2 回复 分享
发布于 2020-02-29 17:19
没有考虑非法输入的情况,牛客上无法通过
2 回复 分享
发布于 2020-03-05 20:15
自认为很奇妙的转换
点赞 回复 分享
发布于 2019-10-01 13:14
&l,&r
点赞 回复 分享
发布于 2019-10-11 21:41
你好我想问一下,为什么我用Python实现后,代码不能通过呢 import sys # 读取输入的整数 lines = sys.stdin.readlines() began, end = map(int, lines[0].strip().split()) count = 0 a = sum(x for x in range(began+1)) while began <= end : if a % 3 == 0: count += 1 began += 1 a += began print(count)
点赞 回复 分享
发布于 2019-11-21 21:41

相关推荐

10-11 17:45
门头沟学院 Java
走吗:别怕 我以前也是这么认为 虽然一面就挂 但是颇有收获!
点赞 评论 收藏
分享
一名愚蠢的人类:多少games小鬼留下了羡慕的泪水
投递荣耀等公司10个岗位
点赞 评论 收藏
分享
17 2 评论
分享
牛客网
牛客企业服务