蓝桥杯2018-省赛-C/C++-A组4题

题目
标题:第几个幸运数

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

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

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

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

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

代码

 1 #include<iostream>
 2 #include<cmath>
 3 #include<stdio.h>
 4 using namespace std;
 5 typedef  long long ll;
 6 ll a[20000];
 7 const ll N=59084709587505;
 8 int main(){
 9 
10     ll i=1;
11     int i_3=0,i_5=0,i_7=0;
12     a[0]=1;
13     for(;a[i-1]<N;i++){//保证a[i]为当前能计算所有的值中最小的  
14         a[i]=min(min(a[i_3]*3,a[i_5]*5),a[i_7]*7);
15         cout<<(a[i]==N)<<" "<<a[i]<<" "<<i<<endl;
16         //反推求a[i]用的是谁 
17         if(a[i]/a[i_3]==3)  i_3++; 
18         if(a[i]/a[i_5]==5)  i_5++;
19         if(a[i]/a[i_7]==7)  i_7++;
20         printf("3:%d 5:%d 7:%d\n",i_3,i_5,i_7);
21     } 
22     cout<<i-1<<endl;
23     
24     
25 } 

猜你喜欢

转载自www.cnblogs.com/memocean/p/12292344.html