原创

【算法题】喊7的次数重排

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

/**
* 7是一个传统的聚会游戏,N个人围成一圈,按顺时针从1N编号。
* 编号为1的人从1开始喊数,下一个人喊的数字为上一个人的数字加1,但是当将要喊出来的数字是7的倍数或者数字本身含有7的话,不能把这个数字直接喊出来,而是要喊""
* 假定玩这个游戏的N个人都没有失误地在正确的时机喊了"",当喊到数字K时,可以统计每个人喊""的次数。
* 现给定一个长度为N的数组,存储了打乱顺序的每个人喊""的次数,请把它还原成正确的顺序,即数组的第i个元素存储编号i的人喊""的次数。
*/
public class Python_M_N_T_7 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
String line = scanner.nextLine();
String[] strings = line.split(" ");

int count = 0; // 计数周期内总的喊次数
for (String s : strings) {
count += Integer.parseInt(s);
}

int[] corrects = new int[strings.length]; // 存放正确的次数
int number = 1; // 从数字1开始叫
while (count > 0) {

for (int i = 0; i < corrects.length; i++) {
if ((number + "").contains("7") || number % 7 == 0) {
// 数字包含7或者能被7整除,就喊”,计一次
corrects[i]++;
count--;
}

if (count == 0) {
// 如果所有的均已出现,就暂停
break;
}

number++; // 数字递增
}
}

StringBuilder sb = new StringBuilder();
for (int correct : corrects) {
sb.append(correct).append(" ");
}

System.out.println(sb.toString().trim());


// 输出K可能的情况 Start
ArrayList<Integer> integers = new ArrayList<>();
integers.add(number);
while (true) {
number++;
if ((number + "").contains("7") || number % 7 == 0) break;
integers.add(number);
}

System.out.println("K可能出现的数字:" + integers);
// 输出K可能的情况 End


}

}
正文到此结束
本文目录