【只含质因子的数】(2018)第九届蓝桥杯省赛 C/C++ A组(第四题)

第四题 

题目

标题:第几个幸运数

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

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

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

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

思路

  使用vc数组存储3、5、7的倍数序列,index[0]记录3的倍数,index[1]记录5的倍数,index[2]记录7的倍数,

每次更新3、5\7的倍数,找最小的加入序列中,同时更新index,也就是让倍数++

结果

  1905


调试(注意)

  调试过程中经常出现  程序运行错误 显示 “process exited with return value 3221225725”

  是因为如果全局声明(未初始化)

vector<long long>vc

 而不是这样声明:

vector<long long>vc(nmax,0);

 vc数组没有正常初始化,况且还不能memset方式初始化,因此在输出vc数组的值时会出现上述问题。

代码

#include <iostream>
#include<vector>
#include<cstring>
using namespace std;
const long long nmax=10000;
vector<long long>vc(nmax,0);
vector<long long>index(3,0);
	
long long min(long long a,long long b,long long c ){
	long long tmp=b>c?c:b;
	return a>tmp?tmp:a;
}
void luckynum(){
	for(long long cnt=1;cnt<=nmax;cnt++){
		vc[0]=1;
		long long a=3*vc[index[0]];
		long long b=5*vc[index[1]];
		long long c=7*vc[index[2]];
		long long tmp=min(a,b,c);
		if(tmp==a){
			index[0]++;
		}
		if(tmp==b){
			index[1]++;
		}
		if(tmp==c){
			index[2]++;
		}
		vc[cnt]=tmp;
	}
	/*for(long long i=0;i<vc.size();i++){ //中间测试 
		printf("%lld ",vc[i]);
	}*/
	for(long long i=0;i<vc.size();i++){
		if(vc[i]== 59084709587505){
			printf("%d\n",i);
		}
	}
	
}

int main(int argc, char** argv) {

	luckynum();

	return 0;
}



  • 4
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值