【Java代码及解题思路】
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
// 输入n
int n = scanner.nextInt();
// 定义二维数组a[i][0]存放跳过了几次,a[i][1]存放下一人的下标
int[][] a = new int[4][2];
// 初始化数组
/*
* 甲乙丙丁依次是
* 0 1
* 0 2
* 0 3
* 0 0
* */
for(int i=0;i<4;i++){
if(i==3){
a[i][0] = 0;
a[i][1] = 0;
}else {
a[i][0] = 0;
a[i][1] = i+1;
}
}
// 一共喊了多少个数了(不加跳过的)
int count = 0;
// 现在喊到第几了(从1开始)
int number = 1;
// a数组索引
int index = 0;
// 循环
while (true){
// 当喊了n个数时,跳出循环
if(count==n){
break;
}
// 如果此时喊的这个数是7的倍数,或者带着7(7在个位如37),(7在十位),(7在百位)
if(number%7==0||number%10==7||(number%100)/10==7||(number/100)==7){
// 把当前这个人跳过的次数+1
a[index][0] = a[index][0]+1;
}else {
// 如果此时喊的不是7的倍数,或者带7的话,一共喊的数+1
count++;
}
// 下一个人
index = a[index][1];
// 继续下一个数
number++;
}
// 将数组中的第一列输出
for(int i=0;i<4;i++){
System.out.println(a[i][0]);
}
}
}