你聽說過約瑟夫問題嗎?問題大致如下:首先n個人圍成乙個圈,標記為1到n號。接著,從1號開始報數(從1開始),然後2號報數,然後3號。。。當有人報到到m時,這個人就要踢出比賽,然後從被踢出的人的下乙個人開始,重新報數(從1開始)。這樣經過n-1次後,就只剩下了乙個人,問最後剩下的那個人是幾號?
第1行為t,表示有t組資料;
第2行到第t+1開始,每行輸入n和m,n表示有幾個人,m為上述的每報數m次就要踢出乙個人
1=乙個數,表示最後剩下了幾號
25 36 4
45
#include #includetypedef
struct
nodeperson;
//結點型別
person * list(int
n) cyclic->next=head;//
首尾相連
return
head;
}void find_delete(person * head,int m)//
此步我是將刪除和遍歷寫在一起的,可分開
person * p=head;
//找到編號為1的人
while (p->number!=1
)
//從編號為1的人開始,只有符合p->next==p時,說明鍊錶中除了p結點,所有編號都出列了,
while (p->next!=p)
tail->next=p->next;//
從鍊錶上將p結點摘下來
free(p);
p=tail->next;//
繼續使用p指標指向出列編號的下乙個編號,比賽繼續
} printf(
"%d\n
",p->number);
free(p);
}int
main()
return0;
}
約瑟環的實現
intarray 100 n 0,m 0,receive 100 receive 陣列用來接收每次交出去的人 n 是用來記錄輸入的總人數 m 是用來記錄中間割幾個人 intcountm 0 用來記錄圈子裡面剩餘的人數 printf 請輸入圈子裡面的總人數 m和迴圈報數出列條件的 m n scanf ...
約瑟環的python實現(舉例說明)
題目是 n個人圍成一圈報數,報到某乙個數m的就出局,問你最後剩下來的人的號碼?網上通用約瑟夫環的演算法是 函式接收n和m,返回最後出圈的是第幾個人 e.g.yuesefu 5,2 3 yuesefu 2,100 1 int yuesefu int n,int m 用python實現上面演算法為 de...
Problem E 建立鍊錶 線性表
time limit 1 sec memory limit 128 mb submit 323 solved 207 線性表 設鍵盤輸入n個英語單詞,輸入格式為n,w1,w2,wn,其中n表示隨後輸入英語單詞個數,試編一程式,建立乙個單向鍊錶,實現 如果單詞重複出現,則只在鍊錶上保留乙個。4 now...