【CCF-CSP】201712-2游戏100分(含思路解释、详细注释)

简介: 【CCF-CSP】201712-2游戏100分(含思路解释、详细注释)

 故事的开头总是极尽温柔,故事会一直温柔……💜

✨你好啊,我是“ 怪& ”,是一名在校大学生哦。

🌍主页链接:怪&的个人博客主页

☀️博文主更方向为:课程学习知识、作业题解、期末备考。随着专业的深入会越来越广哦…一起期待。

❤️一个“不想让我曾没有做好的也成为你的遗憾”的博主。

💪很高兴与你相遇,一起加油!

一、代码如下:

#include <iostream>
using namespace std;
#define N   1002//小朋友最多1000个
int k;
int isK(int x){//满足 “若一个小朋友报的数为k的倍数或其末位数(即数的个位)为k ”则返回1 
  if((x%k==0)||(x%10==k)) return 1;
  else return 0;
}
int main(){
  int  n;
  cin>>n>>k;//n:小朋友个数 k:若一个小朋友报的数为k的倍数或其末位数(即数的个位)为k,则该小朋友被淘汰出局
  int Sum=n;//小朋友剩余Sum个
  int flag[N];// 
  for(int i=1;i<=n;i++){//flag[i]==0,小朋友已出局;flag[i]初始值为1 
    flag[i]=1;
  }
  int num=1;//报的数 
  int ChildFlag=1;//第ChildFlag小朋友报数  
  while(Sum>1){//剩余小朋友数Sum>1,一直执行,Sum 
    while(flag[ChildFlag]==0){//跳过已出局的小朋友(即将ChildFlag移到第一个遇到仍未出局的小朋友处) 
      if(ChildFlag==n){ChildFlag=0;}//穷尽小朋友时,应回到第一个小朋友,末尾执行+1,所以此处赋值为0 
      ChildFlag++;
    }
    if(isK(num)==1 && flag[ChildFlag]==1){//此数满足条件,且轮到的未出局小朋友 
      flag[ChildFlag]=0;//出局 
      //cout<<"淘汰了第"<<ChildFlag<<"小朋友"<<endl;
      Sum--;//满足条件,淘汰一个小朋友 
      num++;//报数+1 
      ChildFlag++;//轮至下一个小朋友 
      if(ChildFlag==n+1){ChildFlag=1;} //穷尽小朋友时,重新轮到第一个小朋友 
    } 
    else if(isK(num)==0 &&  flag[ChildFlag]==1){
      //cout<<"没有淘汰"<<endl;
      ChildFlag++;//轮至下一个小朋友 
      num++;//报数+1 
      if(ChildFlag==n+1){ChildFlag=1;} //穷尽小朋友时,重新轮到第一个小朋友
    }
  }
  for(int i=1;i<n+1;i++){
    if(flag[i]==1)cout<<i<<endl;//此时仅仅有一个小朋友未出局,其flag【i】==1 
  }
  return 0;
}

image.gif

二、解题思路:

1、设置int flag[n]数组,flag【 ChildFlag】记录轮至第ChildFlag个小朋友报数,若flag[ChildFlag]==1,则该小朋友未出局。值为0,则该小朋友已出局。

2、int isK(int x);判断输入的数x是否满足条件,满足则返回1,否则返回0;

3、while(Sum>1):剩余小朋友数>=2,则一直执行。

       (1),第一个while作用:跳过已淘汰的小朋友。因为通过ChildFlag来存储轮至第i个小朋友报数,应先判断flag【ChildFlag】是否等于0,即是否淘汰,通过while()语句跳过连续的已淘汰的小朋友。

       (2),第ChildFlag报的数num满足条件,则执行相应内容。

       (3),第ChildFlag报 的数num不满足条件,则执行相应内容。

4、关键:ChildFlag至n+1时,将ChildFlag赋值为1。结合实例:小朋友报数一轮后,重新由第一个小朋友报数。(函数中有while语句跳过已出局的小朋友)

三、题目如下:

image.gif编辑


目录
相关文章
【CCF-CSP】202009-2风险人群筛查100分(含详细注释)
【CCF-CSP】202009-2风险人群筛查100分(含详细注释)
324 0
【CCF-CSP】202009-2风险人群筛查100分(含详细注释)
【CCF-CSP】201812-2-小明放学100分(含详细注释)
【CCF-CSP】201812-2-小明放学100分(含详细注释)
171 0
【CCF-CSP】201812-2-小明放学100分(含详细注释)
【CCF-CSP】201712-1-最小差值100分(含详细注释)
【CCF-CSP】201712-1-最小差值100分(含详细注释)
165 0
【CCF-CSP】201712-1-最小差值100分(含详细注释)
【CCF-CSP】202109-1-数组推导100分(含详细注释)
【CCF-CSP】202109-1-数组推导100分(含详细注释)
196 0
【CCF-CSP】202109-1-数组推导100分(含详细注释)
【CCF-CSP】201709-2-公共钥匙盒100分(含详细注释)
【CCF-CSP】201709-2-公共钥匙盒100分(含详细注释)
249 0
【CCF-CSP】201709-2-公共钥匙盒100分(含详细注释)
【CCF-CSP】201809-1-卖菜100分(含详细注释)
【CCF-CSP】201809-1-卖菜100分(含详细注释)
99 0
第五十二章 开发自定义标签 - Using csr %CSP.AbstractAtom Write Methods
第五十二章 开发自定义标签 - Using csr %CSP.AbstractAtom Write Methods
72 0
|
JavaScript 编译器 Go
第五十一章 开发自定义标签 - 使用%CSP.Rule方法
第五十一章 开发自定义标签 - 使用%CSP.Rule方法
82 0
|
SQL JavaScript 前端开发
第三十六章 使用 CSP 进行基于标签的开发 - 使用尽可能少的#server和#call调用
第三十六章 使用 CSP 进行基于标签的开发 - 使用尽可能少的#server和#call调用
128 0
|
JavaScript 前端开发 Go
第三十四章 使用 CSP 进行基于标签的开发 - Hyperevent例子
第三十四章 使用 CSP 进行基于标签的开发 - Hyperevent例子
119 0