(1)题目描述

(2)算法思想
- 设置两个变量分别表示所报数以及小朋友编号;
- 以小朋友未淘汰人数为循环变量,当只剩一人时结束循环;
- 淘汰条件——整除k或个位数为k,整除判断直接%k,判断个位数是否为k%10即可;
- 根据每一轮的情况改变所报数以及当前小朋友编号,跳过时编号++;不跳过时编号以及所报数都++,其中如果产生淘汰则对应编号设置为出局下一次报数直接跳过。
(3)代码实现
#include<iostream>
using namespace std;
int main() {
int n,k;
cin>>n>>k;
int cnt=1;
int number=0;
int leftnum=n;
int isout[n]= {0};
while(leftnum!=1) {
if(isout[number%n]) {
number++;
continue;
} else {
if(cnt%k==0 || cnt%10==k) {
leftnum--;
isout[number%n]=1;
}
cnt++;
number++;
}
}
for(int i=0; i<n; i++) {
if(!isout[i]) {
cout<<i+1;
break;
}
}
return 0;
}