救濟金發放

2021-08-18 06:43:34 字數 1005 閱讀 5724

前言

這個問題琢磨了挺長時間,發現裡面有很多需要考慮和注意的

問題描述

n(n<20)個人站成一圈,逆時針編號為1~n。有兩個**,a從1開始逆時針數,b從n開始順時針數。在每一輪中,**a數k個就停下來,**b數m個就停下來(注意有可能兩個**停在同乙個人上)。接下來被**選中的人(1個或者2個)離開隊伍。

輸入n,k,m輸出每輪裡被選中的人的編號(如果有兩個人,先輸出被a選中的)。例如,n=10,k=4,m=3,輸出為4 8, 9 5, 3 1, 2 6, 10, 7。注意:輸出的每個數應當恰好佔3列。

輸入:

10 4 3

輸出:

_ _ 4_ _ 8,_ _ 9_ _ 5,_ _ 3_ _ 1,_ _ 2_ _ 6,_ 10,_ _ 7

演算法思路

這道題目我們大概的思路就是先逆時針找到需要離開的人,再順時針找到需要離開的人,輸出的時候判斷一下兩個人是否相等就完了。但是去實現的時候,發現有很多問題我們需要注意

第一:如果找需要離開的人?這裡用到了非常不常用的迴圈結構do while,如果不採用這個迴圈結構,是不好寫的,因為在找需要離開的人,首先判斷是否已經離開。

第二:我們在設立陣列的時候如果不從a[1]開始設立,後面解決起來也是很麻煩的。

**實現

#include

#include

#define max 20

int a[max];

int n, k, m;

int go(int start, int d, int t) while(a[start] == 0);

}return start;

}int main()

int total = n;

int left = n, right = 1;

while(total)

a[left] = a[right] = 0;

if(total) printf(",");}}

}

救濟金發放

題目 n n 20 個人站成一圈,逆時針編號為1 n。有兩個 a從1開始逆時針數,b從n開始順時針數。在每一輪中,a數k個就停下來,b數m個就停下來 注意有可能兩個 停在同乙個人上 接下來被 選中的人 1個或者2個 離開隊伍。輸入n,k,m輸出每輪裡被選中的人的編號 如果有兩個人,先輸出被a選中的 ...

救濟金發放

n n 20 個人站成一圈,逆時針編號為1 n。有兩個 a從1開始逆時針數,b從n開始順時針數。在每一輪中,a數k個就停下來,b數m個就停下來 注意有可能兩個 停在同乙個人上 接下來被 選中的人 1個或者2個 離開隊伍。輸入n,k,m輸出每輪裡被選中的人的編號 如果有兩個人,先輸出被a選中的 例如,...

救濟金發放

題目描述 題目描述 n n 20 個人站成一圈,逆時針編號為 1 n。有兩個 a從1開始逆時針數,b從n開始順時針數。在每一輪中,a數k個就停下來,b數m個就停下來 兩個 有可能能停在同乙個人上 接下來被 選中的1個或2個人離開隊伍。輸入格式 輸入n k m 可能有多組資料,以 0 0 0結尾。輸出...