解题思路:
开始数字存放放在list集合中
list下标 | 0 | 1 | 2 | 3 | 4 | 5 | 6 |
数字序列 | 0 | 1 | 2 | 3 | 4 | 5 | 6 |
数字序号 | 1 | 2 | 3 | 4 | 5 | 6 |
第一轮:幸运数字2(list初始化可以直接填入下列数字序列)
list下标 | 0 | 1 | 2 | 3 | 4 | 5 | 6 |
数字序列 | 0 | 1 | 3 | 5 | 7 | 9 | 11 |
第二轮:幸运数3
剔除后:
list下标 | 0 | 1 | 2 | 3 | 4 | 5 | 6 |
数字序列 | 0 | 1 | 3 | 7 | 9 |
缩紧后:
list下标 | 0 | 1 | 2 | 3 | 4 | 5 | 6 |
数字序列 | 0 | 1 | 3 | 7 | 9 | 13 | 15 |
...........
参考代码:
import java.util.ArrayList; import java.util.Scanner; public class Test4 { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int m = sc.nextInt(); int n = sc.nextInt(); //定义集合List去存放数字序列 ArrayList<Integer> list = new ArrayList<>(); //由于数字序列1 2 3..是从下标1开始计算的 //为了方便,将集合0索引的数字设置为0 list.add(0); //第一轮剔除,剔除幸运数字2的倍数的下标位置 for(int i = 1;i<n;i++){ //如果集合索引是幸运数字2的倍数,则跳过 if(i % 2 == 0){ continue; } //如果不是,则添加进集合中 list.add(i); } //定义变量记录幸运数字索引 int luckIndex = 2; //使用While循环实现剔除幸运数字倍数的下标 while(true){ //定义临时集合temp,用于存放每一轮剔除后的数字序列 ArrayList<Integer> temp = new ArrayList<>(); temp.add(0); //定义变量记录幸运数字的值 int luckNum = list.get(luckIndex); //遍历集合list for(int i = 1; i < list.size(); i++){ //若为幸运数字倍数的下标,则跳过 if(i % luckNum == 0){ continue; } //否则,就添加入临时集合temp中 temp.add(list.get(i)); } //上一轮剔除结束,下一轮开始 luckIndex++; //将上一轮的数字序列重新赋给list list = temp; //当幸运数字下标超过集合list最大索引list.size()-1,则跳出while循环 if(luckIndex > list.size()-1){ break; } } //定义变量记录符合要求的个数 int count = 0; for (int i = 1; i < list.size(); i++) { int num = list.get(i); if(num > m){ count++; } } System.out.println(count); } }
0.0分
2 人评分
C语言程序设计教程(第三版)课后习题8.4 (Java代码)浏览:729 |
C语言考试练习题_排列 (C语言代码)浏览:1316 |
简单的a+b (C语言代码)浏览:537 |
C语言程序设计教程(第三版)课后习题8.3 (C语言代码)浏览:628 |
C语言程序设计教程(第三版)课后习题5.6 (C语言代码)浏览:851 |
母牛的故事 (C语言代码)浏览:920 |
WU-字符串比较 (C++代码)浏览:755 |
C语言程序设计教程(第三版)课后习题10.4 (C语言代码)浏览:535 |
【求[X,Y]内被除3余1并且被除5余3的整数的和】 (C语言代码)浏览:673 |
C语言程序设计教程(第三版)课后习题5.5 (C语言代码)浏览:555 |