n(n<20)我的站成一圈,逆時針編號爲1~n。有兩個官員,A從1開始逆時針數,B從n開始順時針數。在每一輪中,官員A數k個就停下來,官員B數m個就停下來(注意有可能兩個官員停在同一我的上)。接下來被官員選中的人(1個或者2個)離開隊伍。輸入 n,k,m 輸出每輪裏被選中的人的編號數組
樣例輸入 spa
n=10 k=4 m=3code
樣例輸出 blog
4 8 9 5 3 1 2 6 10 7io
#include <stdio.h>
#include <stdlib.h>
int main(void) { int n, m, k; int i; int stemp_m, stemp_k; // 表明軍官AB所在的位置 int people_num; // 記錄隊伍中還有多少人未被選出 int people_state[20] = {0}; // 初始化數組全部值爲0, // 當值爲1時,表明該人存在, // 當值爲0時,表明該人已被選出 printf("請輸入總人數n,官員A數的k,官員B數的m:"); scanf("%d %d %d", &n, &k, &m); for(i = 1; i <= n; i++) { people_state[i] = 1; } stemp_m = n + 1; stemp_k = 0; people_num = n; while(people_num) { for(i = 0; i < k; i++) // 得出官員A所選的人的位置 { do { stemp_k = (stemp_k + 1) % n; if(stemp_k == 0) { stemp_k = n; } } while (people_state[stemp_k] == 0); } for(i = 0; i < m; i++) // 得出官員B所選的人的位置 { do { stemp_m = stemp_m - 1; if(stemp_m == 0) { stemp_m = n; } } while (people_state[stemp_m] == 0); } printf("%d ", stemp_k); people_num--; if(stemp_m != stemp_k) { printf("%d ", stemp_m); people_num--; } people_state[stemp_m] = 0; people_state[stemp_k] = 0; } printf("\n"); system("pause"); }