simulation,類似Josephus problem,照著規則模擬。
CODE
#include <iostream> #define MAX 20 int main(){ int n, k, m; bool a[MAX]; while( scanf("%d%d%d", &n, &k, &m) != EOF ){ if( n==0 && k==0 && m==0 ) break; for(int i=0; i<n; ++i) a[i] = 1; bool printed = 0; int i = -1, j = n, left = n; int cnt_k, cnt_m; while( left > 0 ){ cnt_k = cnt_m = 0; while( cnt_k != k ){ i = (i+1)%n; if( a[i] ) ++cnt_k; } while( cnt_m != m ){ j = (j+n-1)%n; if( a[j] ) ++cnt_m; } if( printed ) printf(","); else printed = 1; if( i == j ){ a[i] = 0; --left; printf("%3d", i+1); } else{ a[i] = a[j] = 0; left -= 2; printf("%3d%3d", i+1, j+1); } }//killing printf("\n"); }//while return 0; }
No comments:
Post a Comment