description
有n只猴子,從1~n進行編號。它們按照編號的順時針方向排成乙個圓圈,然後從第一只猴子開始報數。第一只猴子報的第乙個數字為1,以後每只猴子報的數字都是它們前面猴子所報數字加1。如果乙個猴子報的數字是m,則該猴子出列,下乙個猴子重新從1開始報數,直到所有猴子都出列為止,最後乙個出列的猴子勝出。你的任務是對於給定猴子數量和報數上限值m,確定出能夠被選作大王的猴子的編號。
input
第一行為乙個整數n,表示測試資料的組數,接下來的n行中每行包含兩個整數,第乙個數是猴子的個數,第二個數是報數上限值m(m>1),兩數之間由空格分隔。
output
輸出共n行,每行為對應輸入行獲勝猴子的編號。
sample input
8 55 8
sample output
#include #include /* 定義鍊錶節點型別 */typedef struct node
linklist;
int creat(int n, int m)
p = head;
/* 儲存節點總數 */
total = n;
q = head;
/* 只剩乙個節點時停止迴圈 */
while (total != 1)
/* q 指向 p 節點的前驅 */
while (q->next != p)
/* 刪除 p 節點 */
q->next = p->next;
/* 儲存被刪除節點指標 */
s = p;
/* p 指向被刪除節點的後繼 */
p = p->next;
/* 釋放被刪除的節點 */
free(s);
/* 節點個數減一 */
total--;
}//free(p);
/* 列印最後剩下的節點序號 */
int vsdata=p->data;
free(p);
return vsdata;
}int main()
for (int ii=0;iireturn 0;
}
鍊錶 PTA 猴子選大王
一群猴子要選新猴王。新猴王的選擇方法是 讓n只候選猴子圍成一圈,從某位置起順序編號為1 n號。每只猴子預先設定乙個數 或稱定數 用最後乙隻猴子的定數d,從第一只猴子開始報數,報到d的猴子即退出圈子 當某只猴子退出時,就用它的定數決定它後面的第幾隻猴子將在下次退出。如此不斷迴圈,最後剩下的乙隻猴子就選...
(C語言)猴子選大王
問題描述 要從n只猴子中選出一位大王。它們決定使用下面的方法 n只猴子圍成一圈,從1到n順序編號。從第q只猴子開始,從1到m報數,凡報到m的猴子退出競選,下一次又從退出的那只猴子的下乙隻開始從1到m報數,直至剩下的最後乙隻為大王。請問最後哪只猴子被選為大王。輸入形式 控制台輸入三個整數n,m,q 輸...
鍊錶經典問題 猴子選大王
n 只猴子要選大王,選舉方法如下 所有猴子按1,2 n 編號並按照順序圍成一圈,從第 1個猴子起,由 1開始報數,報到 m時,該猴子就跳出圈外,下乙隻猴子再次由 1開始報數,如此迴圈,直到圈內剩下乙隻猴子時,這只猴子就是大王。include includeusing namespace std ty...