版权声明: https://blog.csdn.net/a673953508/article/details/81074983
题解:
这道题目书上有题解,水题直接给出代码orz
主要是两个人都会挑选,判断好方向和次数就行(注意点:两个挑选完后才判断和删除人,不要挑选一个就删除一个)
#include <bits/stdc++.h>
using namespace std;
int n,k,m;
int is[25]; //记录该位置是否有人
int fin_peo(int dic,int pos,int jmp) { //是哪一个人和上一次的方向 ,跳几格
for(int i = 0; i < jmp; i++) {
do{
pos += dic;
if(pos > 20) pos = 1;
if(pos == 0) pos = 20;
}while(!is[pos]);
}
return pos;
}
int main() {
//freopen("in.txt","r",stdin);
// freopen("out.txt","w",stdout);
while(scanf("%d%d%d",&n,&k,&m) == 3 && n) {
memset(is,-1,sizeof(int)*(n+1)); //不算0
int kp = 0,mp = n+1;
while(n) {
kp = fin_peo(1,kp,k);
mp = fin_peo(-1,mp,m);
is[kp] = 0; is[mp] = 0;
if(kp == mp) {
printf("%3d",kp);
n--;
} else {
printf("%3d%3d",kp,mp);
n = n-2;
}
if(n) printf(",");
}
printf("\n");
}
return 0;
}