前言
這個問題琢磨了挺長時間,發現裡面有很多需要考慮和注意的
問題描述
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結尾。輸出...