CCF201712-2 游戏
题目:
题目分析:
此题是约瑟夫问题的变体,需要循环淘汰游戏人数,直到剩余一个人。
需要设立一个报数器,不停自增1报数。
还需要对出局的人加以标记,不再报数。
具体代码有注释。
//ccf201712-2 游戏
#include<iostream>
using namespace std;
int n,k,a[1010],cn,m,b; //cn-当前人数,m-报数器,b-下标
int main(){
cin>>n>>k; cn=n;
while(cn>1){ //人数多于1,一直循环报数
if(a[b]==0){ //a[]=0没有被淘汰,报数
m++;
if((m%10==k||m%k==0)){
a[b]=1; //满足条件,淘汰并标记
cn--; //当前人数减 1
}
}
if((++b)==n)b=0; //下标自增 1,如果下标等于n,重置为 0
}
for(int i=0;i<n;i++)
if(a[i]==0)cn=i+1; //注意数组下标i表示第i+1个人
cout<<cn<<endl;
return 0;
}