其他分享
首页 > 其他分享> > 题目18

题目18

作者:互联网

 喊7 是一个传统的聚会游戏
        N个人围成一圈
        按顺时针从1-7编号
        编号为1的人从1开始喊数
        下一个人喊得数字是上一个人喊得数字+1
        但是当将要喊出数字7的倍数或者含有7的话
        不能喊出 而是要喊过

        假定N个人都没有失误。
        当喊道数字k时
        可以统计每个人喊 “过"的次数

        现给定一个长度n的数组
        存储打乱的每个人喊”过"的次数
        请把它还原成正确顺序

        即数组的第i个元素存储编号i的人喊“过“的次数

           输入为1行
           空格分割的喊过的次数
           注意k并不提供

           k不超过200
           数字个数为n
           输出描述

           输出为1行
           顺序正确的喊过的次数  空格分割

           例子
           输入
             0 1 0
           输出
             1 0 0

           只有一次过
           发生在7
           按顺序编号1的人遇到7  所以100
           结束时的k不一定是7 也可以是 8 9
             喊过都是100

             例子
           输入
             0 0 0 2 1
           输出
             0 2 0 1 0
           一共三次喊过
           发生在7 14 17
           编号为2 的遇到7 17
           编号为4 的遇到14
<?php
$s=fgets(STDIN);
solution($s);

function solution($s)
{
    $list=explode(' ',$s);
    $sum=array_sum($list);
    $j=0;
    $res=[];
    //初始化并赋值0
    for($a=0;$a<count($list);$a++) $res[$a]=0;
    for ($i=1;$i<300;$i++,$j++){
        if($j==count($list)) $j=0;
        if($i%7==0||strpos($i.'','7')){
            $res[$j]+=1;
        }
        $sum1=0;
        foreach ($res as $v) $sum1+=$v;
        if($sum==$sum1) break;
    }
    echo implode(' ',$res);
}

 

标签:输出,题目,数字,人喊,18,次数,17,编号
来源: https://www.cnblogs.com/weiguomiao/p/16484792.html