更多JAVA版答案移步我的博客:蓝桥杯JAVA版答案汇总
本题考查
模拟(题目不太像堆的题目,博主觉得是考察模拟)
思路
按照题目给定的方法进行模拟就可以解决,题目给定n与m,声明一个长度为m的布尔型数组,未被筛出的元素的数组值为false,筛出的元素数组值为true。设定两个变量lucky与index分别代表当前的幸运数与下一个幸运数的下标,变量counter为了记录每次找lucky时所经过的数组元素个数。
AC代码
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scaner = new Scanner(System.in);
int n=scaner.nextInt(), m=scaner.nextInt(), lucky = 2, counter = 0, index = 2, result = 0;
scaner.close();
boolean[] flag = new boolean[m];
while(true) {
counter=0;
for(int i=1;i<m;i++) {
if(!flag[i]) counter++;
if(counter%lucky==0) {flag[i]=true; counter=0;}
}
counter=0;
boolean isExist = false;
for(int i=1;i<m;i++) {
if(!flag[i]) counter++;
if(counter==index) {lucky=i; index++; isExist = true; break;}
}
if(!isExist) break;
}
for(int i=n+1;i<m;i++)
if(!flag[i]) result++;
System.out.println(result);
}
}