ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

【34】蓝桥杯之第几个幸运数(填空题)

2020-02-05 13:35:54  阅读:329  来源: 互联网

标签:第几个 ++ pow 填空题 long 蓝桥 MAX 幸运 1905


问题描述:第几个幸运数

到x星球旅行的游客都被发给一个整数,作为游客编号。 x星的国王有个怪癖,他只喜欢数字3,5和7。 国王规定,游客的编号如果只含有因子:3,5,7,就可以获得一份奖品。我们来看前10个幸运数字是: 3 5 7 9 15 21 25 27 35 45 因而第11个幸运数字是:49小明领到了一个幸运数字 59084709587505,他去领奖的时候,人家要求他准确地说出这是第几个幸运数字,否则领不到奖品。请你帮小明计算一下,59084709587505是第几个幸运数字。

#include<bits/stdc++.h>
using namespace std;

int main()
{
		long long MAX =  59084709587505;
//		long long MAX =  49 ;
		int count = 0;
		for ( long long i = 0; pow(3,i) < MAX; ++i)
			for ( long long j = 0; pow(5,j) < MAX; ++j)
				for ( long long k = 0; pow(7,k) < MAX; ++k)
//					if (pow(3,i) * pow(5,j) * pow (7,k) < MAX)//运行结果1906
					if (pow(3,i) * pow(5,j) * pow (7,k) < MAX&&pow(3,i) * pow(5,j) * pow (7,k) > 1 )//运行结果1905 
//					if (pow(3,i) * pow(5,j) * pow (7,k) <= MAX&&pow(3,i) * pow(5,j) * pow (7,k) > 1 )// 运行结果1905
						{count ++;
//						cout<<i<<" "<<j<<" "<<k<<" "<<endl;;
						} 
//		要排除ijk全是0的情况,比如MAX等于2时, ijk全是0,count显示有一种情况 
//		cout<<count-1<<endl;
		cout<<count<<endl;		

	return 0;
}

代码参考链接:https://blog.csdn.net/qq_36561697/article/details/80752392

总结

刚开始真的很蠢的想着,暴力遍历1-59084709587505,其中满足是幸运数字的话就++,但是这样子很慢,效率很低!!
脑子转一下弯,其实就知道幸运数字满足:3^a * 5^b * 7^c。代表有a个3,b个5,c个7相乘。那这样子就可以分别for循环a,b,c的值,并且满足的时候就代表一个幸运数

if (pow(3,i) * pow(5,j) * pow (7,k) < MAX&&pow(3,i) * pow(5,j) * pow (7,k) > 1 )//运行结果1905 
if (pow(3,i) * pow(5,j) * pow (7,k) <= MAX&&pow(3,i) * pow(5,j) * pow (7,k) > 1 )// 运行结果1905

两个运行结果都是1905,因为ijk是受前面的三个for循环里限制的,三个for循环里面都没有<=MAX,只是<MAX,所以两者结果肯定一样。

关于答案的疑惑

网上好多答案都是说是1905.按道理程序跑出的结果是1905,证明前面有1905个幸运数,那59084709587505不应该是第1906个幸运数吗,那答案不是应该是1906吗??疑惑。。。一直没理解。。。

李子树下凤凰开 发布了45 篇原创文章 · 获赞 0 · 访问量 2088 私信 关注

标签:第几个,++,pow,填空题,long,蓝桥,MAX,幸运,1905
来源: https://blog.csdn.net/weixin_46021869/article/details/104174414

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有