牛客练习赛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("%lld\n", ans);
	return 0;

} 

猜你喜欢

转载自blog.csdn.net/qq_40129237/article/details/79590471