私信TA

用户名:uq_88505829964

访问量:1116

签 名:

等  级
排  名 16605
经  验 800
参赛次数 0
文章发表 3
年  龄 0
在职情况 学生
学  校
专  业

  自我简介:

解题思路:
用ArrayList数组从1开始存储数字,求出1到n的所有幸运数,然后根据m,得到m到n之间的所有幸运数。



参考代码:

import java.util.ArrayList;
import java.util.Scanner;

//第八题:幸运数
public class one9 {
        public static void main(String[] args) {
            Scanner in = new Scanner(System.in);
            //定义范围上下限
            int m = in.nextInt();
            int n = in.nextInt();
            //存储从一到n的数字,之所以到1到n,原因是题目要求的是从1开始到无穷尽的数字之间,的所有幸运数,然后在得到m到n之间的幸运数。
                ArrayList<Integer> arrayList = new ArrayList<>();
                //给数字0下标的位置随便设置一个数,为了使开始时下标为几存储的数字就为几
                arrayList.add(-1);
                //给数组添加数字
             for (int i=1;i<=n;i++){
                 arrayList.add(i);
            }
             //数组的第二个数字为幸运数,也就是2
             int x=2;
             //a数组的下标
             int index=0;
             //该题目是下标%幸运数为0的下标都要删除,a数字存储的就是被删除的下标
            int [] a = null;
            //b数组存储每一个幸运数的具体值
            int [] b = new int[n];
            //b数组的下标
            int bIndex=0;
            //开始存储第一个幸运数2,之所以先把第一个幸运数存储并且删除所有下标能整除2的下标的数,是因为之后我们的幸运数都是arrayList的下标加一,看不懂没关系,后面也会说
            b[bIndex++]=arrayList.get(2);
            //先创建一次a数组,用来存储幸运数为2的时候删除数字的下标
            a = new int[arrayList.size()];
            //找到要删除的数字的下标
            for (int i=1;i<=arrayList.size()-1;i++){
                if (i%arrayList.get(x)==0){
                    a[index++]=i;
                }
            }
            //从a数组的后面开始删除,如果从前面开始删除,假如先删除下标为2的数字,那么删除后,arrayList数组中原来下标为4的数字,就变成3了,就无法删除了。
            for (int i=index-1;i>=0;i--){
                arrayList.remove(a[i]);
            }
        //大于等于arrayList长度的时候在停止的原因是:要把所有的幸运数都存储起来,就要遍历一遍,以1到20为例,幸运数为2,3,7,9,13,15,
        while (x<arrayList.size()){
            //幸运数不同时,a数组下标清零,重新创建a数组
            index = 0;
            a = new int[arrayList.size()];
            //记录该幸运数
            b[bIndex++] = arrayList.get(x);
            //判断下标处是否该被删除
            for (int i=1;i<=arrayList.size()-1;i++){
                if (i%arrayList.get(x)==0){
                    a[index++]=i;
                }
            }
            //从后往前删除arrayList数组
            for (int i=index-1;i>=0;i--){
                arrayList.remove(a[i]);
            }
            //幸运数等于arrayList数组的下一个数字,这也是为什么上面代码要先把幸运数字2先记录下的原因,如果不先记录下来,因为2太小,导致删除可以整除2的下标数字后,下一个幸运数3到了原来2的位置,导致3这个幸运数就得不到,所以只能先把2搞出去。
            x++;

        }
        int sum=0;
        for (int i=0;i<b.length;i++){
            if (b[i]>m&&b[i]!=n){
                sum++;
            }
        }

            System.out.println(sum);
        }
}


 

0.0分

0 人评分

  评论区

  • «
  • »