题目
标题:第几个幸运数
到x星球旅行的游客都被发给一个整数,作为游客编号。 x星的国王有个怪癖,他只喜欢数字3,5和7。 国王规定,游客的编号如果只含有因子:3,5,7,就可以获得一份奖品。 我们来看前10个幸运数字是: 3 5 7 9 15 21 25 27 35 45 因而第11个幸运数字是:49 小明领到了一个幸运数字 59084709587505,他去领奖的时候,人家要求他准确地说出这是第几个幸运数字,否则领不到奖品。 请你帮小明计算一下,59084709587505是第几个幸运数字。 需要提交的是一个整数,请不要填写任何多余内容。
答案
1905
注意事项
- 游客的编号如果只含有因子:3,5,7,才可以获得一份奖品
- 幸运数过大,超出了int的范围,需要用long
代码
import java.util.ArrayList;
public class Main {
//蓝桥杯要求class命名为Main,且无package
public static void main(String []args){
long luck=59084709587505L;//幸运数,末尾是字母L而不是数字1,数字超出了int的范围,故而用long
long san=0,wu=0,qi=0;
ArrayList<Long> list = new ArrayList<Long>();//将3,5,7存入list集合
list.add(3L); //L代表long类型
list.add(5L);
list.add(7L);
while(!(list.get(list.size()-1)==(luck))){
//如果不和幸运数相等就执行
long sanbei = list.get((int)san)*3;
long wubei = list.get((int)wu)*5;
long qibei = list.get((int)qi)*7;
long min = min(sanbei,wubei,qibei);
if(min==sanbei){
san++;
}
if(min==wubei){
wu++;
}
if(min==qibei){
qi++;
}
list.add(min);
}
System.out.println(list.size());
}
public static long min(long a,long b,long c){
//返回最小值
long m = a>b?b:a;
return m>c?c:m;
}
}