喊7的次数重排

222 阅读1分钟

喊7的次数重排,逢7或者7的倍数喊’过‘

现给定一个长度为N的数组,存储了打乱顺序的每个人喊‘过’的次数,不提供最后喊到的值

例 输入:0 1 0 有3个人参与,有一个喊了‘过’ 输出:1 0 0 顺序为正确喊‘过’的次数

//含7的次数重排
      /* 
   甲 乙 丙 丁
   1  2  3  4
   5  6  过 8
   9  10 11 12
  */
have7(arr){
 //打乱顺序的arr
  //喊’过‘的次数
  let num = arr.reduce(function(prev,cur){
    return prev+cur
  })
  console.log(num,'num')
  //最后喊的值N不提供,需要求 a对比标识
  let N= 0,a=0;
  for(let k=1;k<=num*7;k++){
    if(k%7==0||String(k).indexOf('7')>-1){
      a++;
      if(a==num){
        // N=k //k最小为此
         N = num!==1? num*7 -1:k //最大为此
      } 
    }
  }
  console.log(N,'N')
  //统计每个人喊’过‘的数组
  let peopleArr = arr.map((item,index)=>{
    return {
      people: index+'人',
      time: []
    }
  })
  console.log(peopleArr,'人数')
  for(let i=1;i<=N;i++){
     if(i%7==0||String(i).indexOf('7')>-1){
      if(i%peopleArr.length==0){//数组最后一项
        peopleArr[peopleArr.length-1].time.push(i)
      }else{//
        peopleArr[i%peopleArr.length -1].time.push(i)
      }
     }
   }
   let res = peopleArr.map(item => item.time.length)
   console.log(peopleArr,'结果',res)
},