n(n<20)個人站成一圈,逆時針編號為1~n,有兩個官員,A從1開始逆時針數,B從n開始順時針數,在每一輪中,官員A數k個就停下來,官員B數m個就停下來(注意有可能兩個官員停在同一個人上),接下來被官員選中的人(1個或者2個)離開隊伍,輸入 n,k,m 輸出每輪里被選中的人的編號
樣例輸入
n=10 k=4 m=3
樣例輸出
4 8 9 5 3 1 2 6 10 7
#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");}
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/67328.html
標籤:C
上一篇:MODBUS 資料格式相關記錄
下一篇:互斥那點事兒(上)
