重要一点:使用周期来表示编号时,如果有n个人,那么第n个人n%n==0,所以余数为0,表示第n个人,那么输出时要特别判断一下,要是余数为0,就输出n
- 输入参数:
n
代表总人数或总元素数量。k
代表一个特定的数字,用于确定淘汰规则。
- 初始化:
flag
数组用于标记哪些元素或人已经被淘汰。cnt
初始化为n
,表示当前还未被淘汰的元素或人的数量。i
和cont
是循环的计数器,其中i
代表当前考虑的元素或人的位置,cont
可能代表某种累积的计数或顺序。
- 淘汰规则:
- 函数
fun
检查给定的数字cont
的个位数是否为k
。如果是,则返回true
,表示这个元素或人应该被淘汰。 - 在主循环中,每次迭代检查
cont
的个位数是否等于k
,或者通过fun
函数判断,如果满足条件,则该元素或人被淘汰(flag[i%n]
设置为1
),cnt
减少,并且移动到下一个元素或人。
- 函数
- 循环结束条件:
- 当
cnt
减到1
时,表示只剩下最后一个未被淘汰的元素或人,此时循环结束。 - 如果在循环中遇到已经被淘汰的元素或人(
flag[i%n] == 1
),则跳过并继续检查下一个。
- 当
- 输出结果:
- 循环结束后,输出最后未被淘汰的元素或人的位置。如果其位置恰好是
n
,则直接输出n
;否则,输出i%n
。
- 循环结束后,输出最后未被淘汰的元素或人的位置。如果其位置恰好是
#include<iostream>
using namespace std;
int n,k;
int flag[1005];
bool fun(int cont){
int tp=cont%10;
if(tp==k){
return true;
}
else{
return false;
}
}
int main(){
cin>>n>>k;
int cnt=n;
int i=1;
int cont=1;
while(1){
if(flag[i%n]==1){
i++;
continue;
}
else if(cnt==1){
if(i%n==0){
cout<<n;
}
else{
cout<<i%n;
}
break;
}
else{
if(cont%k==0||fun(cont)){//要被淘汰
flag[i%n]=1;
cnt--;
i++;
cont++;
}
else{
i++;
cont++;
}
}
}
return 0;
}