喊7过

题目:

喊7是一个传统的聚会游戏,N个人围成一圈,按顺时针从1到N编号。每一轮游戏,从编号为1的人从1开始喊数,下一个人喊的数字为上一个人的数字加1, 但是当将要喊出来的数字是7的倍数或者数字本身含有7的话,不能把这个数字直接喊出来, 而是要喊"过"。假定玩这个游戏的N个人都没有失误地在正确的时机喊了"过",当喊到数字K时,可以统计每个人喊"过"的次数。现给定一个长度为N的数组,存储了打乱顺序的每个人喊"过"的次数,请把它还原成正确的顺序,即数组的第i个元素存储编号i的人喊"过"的次数。

思路:

根据输入的数字相加可以得到喊“过”的次数和总人数
根据模拟发现 (报数/总人数)的余数 -1 就等于报数人的下标(下标从0开始所以需要-1) 总人数为5:喊1的下标为0;喊2 的下标为1。。。喊6的下标为0(6%5-1)
根据2的规律就可以筛选出符合条件的下标,然后再做叠加的动作

`
public class Main{

public static void main(String[] args) {

    Scanner sc = new Scanner(System.in);

    String[] s = sc.nextLine().split(" ");
    int len = s.length;

    int[] ints = new int[len];

    int num = 0;
    for(int i=0;i<len;i++){
        num+=Integer.valueOf(s[i]);     //计算出符合的次数
    }
    int step = 7;   //直接从7开始
    while (num>0){
        if(step%7==0 || String.valueOf(step).contains("7")){
            ints[(step-1)%len]++;      //同过数组长度算出符合的下标
            num--;      //符合的次数递减
        }
        step++;     //报数的次数递增
    }

    String res = "";
    for(int i=0;i<len;i++){
        res+=String.valueOf(ints[i]);
        if(i == len-1){
            break;
        }
        res+=" ";
    }

    System.out.println(res);
}

}
`

posted @ 2023-11-03 21:37  约拿小叶  阅读(41)  评论(0编辑  收藏  举报