我是靠谱客的博主 跳跃世界,最近开发中收集的这篇文章主要介绍牛客练习赛13-B,幸运数字2,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

链接: https://www.nowcoder.com/acm/contest/70/B
来源:牛客网

时间限制:C/C++ 1秒,其他语言2秒
空间限制:C/C++ 262144K,其他语言524288K
64bit IO Format: %lld

题目描述

定义一个数字为幸运数字当且仅当它的所有数位都是4或者7。
比如说,47、744、4都是幸运数字而5、17、467都不是。
定义next(x)为大于等于x的第一个幸运数字。给定l,r,请求出next(l) + next(l + 1) + ... + next(r - 1) + next(r)。

输入描述:

两个整数l和r (1 <= l <= r <= 1000,000,000)。

输出描述:

一个数字表示答案。

解题思路:这里主要是dfs(),用递归算法来计算出所有的包含4和7的数字,并且将它们存放在一个二维数组a[]中,之后对她们进行排序,按照顺序找出从l到r的next()值,然后相加!

AC代码:

#include<iostream>
#include<algorithm>
using namespace std;
long long int a[10500];
int t = 0;
long long int l, r;
long long int ans=0;
void dfs(long long int number)
{
	if (number > 4444444444) return;
	a[t++] = number;
	dfs(number * 10 + 4);
	dfs(number * 10 + 7);
}
int main()
{
	dfs(0);
	a[t] = 4444444444;
	sort(a, a + t);
	scanf("%lld%lld", &l, &r);
	for (long long int i = 0; i <= t; i++)
	{
		//printf("%lld ", a[i]);
		while (a[i] >= l&&l <= r)
		{
			ans += a[i];
			l++;
		}
	}
	printf("%lldn", ans);
	return 0;

} 

最后

以上就是跳跃世界为你收集整理的牛客练习赛13-B,幸运数字2的全部内容,希望文章能够帮你解决牛客练习赛13-B,幸运数字2所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(57)

评论列表共有 0 条评论

立即
投稿
返回
顶部