[蓝桥杯2018初赛]第几个幸运数

这题三指针应该不好想把,怎么算是暴力呢。我是做过leetcode的这一题所以对三指针有印象,然而做的时候还是卡了好半天。

两个问题,
1:为什么数组创建之后不能用{}花括号的数据来赋值数组,书上说是不匹配数组名是指针类型,可是编译器优化一下不行吗,和初始化时用花括号没什么区别吧。这样一个个赋值好麻烦的
2:我又自作聪明了,以为只要3,5,7这3个指针不指向3,5,7这3个数就不会出现相等的情况,导致没有判断相等代码出现死循环了。后面想了一下,比如3只要指向了一个丑数a,且这个丑数有一个因子是5,把这个因子换成3得到b=3a/5也是一个丑数,那么3a和5b也是会相等的。像下面我学习别人的代码一样,相等就都往后指一个就行了。

import java.util.Scanner;

public class Main {

    static long[] data=new long[10000000];
    static int res=2;
    public static void main(String[] args) {
        int tag=0;
        data[0]=7;
        data[1]=9;
        data[2]=15;
        data[3]=21;
        data[4]=25;
        data[5]=27;
        data[6]=35;
        data[7]=45;
        int pi=3,pj=2,pk=0,index=8;
        while (true){
            long temp1=data[pi]*3,temp2=data[pj]*5,temp3=data[pk]*7;
            long min=Math.min(temp1,Math.min(temp2,temp3));
            if (min==temp1)pi++;
            if (min==temp2)pj++;
            if (min==temp3)pk++;
            if ((data[index++]=min)==59084709587505l)break;
        }
        System.out.println(res+index);
//        Scanner scanner=new Scanner(System.in);

    }

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值