数据量小,用一个数组记录哪些数字已经输出过了就可以了!
就和 图记录哪些点访问过 、 hash表的墓碑一样
#include <iostream>
#include <cstdio>
using namespace std;
int main(){
int N, k, m;
while( scanf("%d%d%d", &N, &k, &m) != EOF &&
N > 0 && k > 0 && m > 0 ){
bool dolls[25] = {false};
int counter = N-1, backCounter = 0;
int number = 0;
while( number < N ){
for( int i = 0 ; i < k ; ++i ){
do{
counter = (counter + 1) % N;
} while( dolls[counter] );
}
for( int i = 0 ; i < m ; ++i ){
do{
backCounter = (backCounter - 1 + N) % N;
} while( dolls[backCounter] );
}
if( counter == backCounter ){
dolls[counter] = true;
if( number > 0 ){
printf(",");
}
printf("%3d", counter+1);
++number;
}
else {
dolls[counter] = true;
dolls[backCounter] = true;
if( number > 0 ){
printf(",");
}
printf("%3d%3d", counter+1, backCounter+1);
number += 2;
}
}
printf("\n");
}
return 0;
}