蓝桥杯:第几个幸运数(暴力枚举法)

1、问题描述

到x星球旅行的游客都被发给一个整数,作为游客编号。
x星的国王有个怪癖,他只喜欢数字3,5和7。
国王规定,游客的编号如果只含有因子:3,5,7,就可以获得一份奖品。

我们来看前10个幸运数字是:
3 5 7 9 15 21 25 27 35 45
因而第11个幸运数字是:49

小明领到了一个幸运数字 59084709587505,他去领奖的时候,人家要求他准确地说出这是第几个幸运数字,否则领不到奖品。

请你帮小明计算一下,59084709587505是第几个幸运数字。

需要提交的是一个整数,请不要填写任何多余内容。

2、我对这个问题的看法
  这个问题可以用暴力枚举法(多重for循环)解决。题目中要求那个数的因子只能含有3、5、7,也就是说那个数是 3 i 5 j 7 r 3^{i}*5^{j}*7^{r} 这种形式的,所以可以用三层for循环来实现 3 i 5 j 7 r 3^{i}*5^{j}*7^{r} 这样的形式。
  :这个题目要注意到数的范围很大,故要用long long型。

3、解题代码

#include<iostream> 
using namespace std;

int main()
{
	int c=0;
	long long n;                              //n很大,要用long long型; 
	cin>>n;
	for(long long i=1;i<=n;i=3*i)             //实现 3^i; 
	{
		for(long long j=1;i*j<=n;j=5*j)       //实现 3^i*5^j; 
		{
			for(long long r=1;i*j*r<=n;r=7*r) //实现 3^i*5^j*7^r; 
				++c;                          //计算因子; 
		}
	}
	cout<<c-1;                              //去掉 i=j=r=1的情况; 
	return 0;
}

4、运行结果
  输入数据:59084709587505
  应输出:1905
在这里插入图片描述

运行环境:DEV c++

至此,整个题目解答完毕!!!

 结语:以上就是我对这个问题的理解、解法,可能存在着更好、更简洁的解法代码,希望大家提出来,我们一起讨论,交换看法,共同进步。若上述代码中存在问题,望大家指正,谢谢大家看到结尾。(∩^∩)

奋斗的2351

发布了14 篇原创文章 · 获赞 3 · 访问量 795

猜你喜欢

转载自blog.csdn.net/weixin_45620022/article/details/105165737