誰能告訴我約瑟夫問題C語言寫的程式的心得嗎 謝謝

2025-03-24 19:10:17 字數 1275 閱讀 9917

1樓:

這個關鍵是用兩個指標吧。

乙個移動的,乙個指向要刪除的節點。

另外注意保留頭指標。

利用c++解決約瑟夫問題。

2樓:網友

這裡補充一下約瑟夫問題的描述:n個人圍成一圈,從第乙個開始報數,數到m的人出隊,然後他的下一位繼續從1開始報數,數到m的出隊,如此迴圈直到剩下乙個人,求最後剩下的那個人最初是隊伍中的第幾位。

解決這道題可以採用模擬報數的方法,建立乙個大小為n的陣列,陣列的第n個元素表示第n個人是否還在隊伍中,首先將每個元素都置為1,表示全員都在隊伍中。如果第n個人出隊,則將第n個元素置為0。

模擬報數可以使用乙個累加計數器,用它表示這輪報數已有多少人報數,然後迴圈訪問每個人,若其在隊伍中,則將計數器+1,如果累加到m,則這個人出隊。如此迴圈,直到n-1個人出隊,僅剩1人。

最後遍歷一下那個陣列,找到還在隊伍中的人就可以。

**如下:#include

using namespace std;

int main()

i++;i %= n;

for (i = 0; i < n; i++)if (a[i])

delete a;

return 0;}

3樓:匿名使用者

這是以前寫的乙個用c++動態陣列實現約瑟夫環問題。 有問題還請追問。程式如下:#include

using namespace std;int main()}for(i=0;!a[i];+i); //尋找陣列中勝利的玩家。

cout<<"第 "附圖:

c++ 關於約瑟夫函式的乙個問題,求解。

4樓:

如果我理解沒錯的話,l->length應該指的是剩餘的總人數。n是用來表示下標的,下標肯定不能超過人數啊,所以對人數取模。例如一共有5個人,從1開始報數,第5個人報過之後,下標不能變成6,應該變成6%5也就是1

5樓:月下憶嬌娘

這不是很清楚嗎?比如5個人,報道7的人丟下去。但是5個人來一輪也才到5啊。

所以j會一直加,知道遇見j = m;但是人數不會一直家,所以實際上第六個人就是第乙個,第七個人就是第二個。

n = 6 % 5 = 1;

n = 7 % 5 = 1;

這意思就是當人的座標超過了最大人數時候將這個人的座標置為0,迴圈內也可以這麼寫。

if (n == l->length)//即現在是最後乙個人了。

誰能告訴我怎麼解決這個問題,誰能告訴我怎麼解決這個問題?

xp吧?用360修復一下 系統有問題了 啊 如果我是你 就從新做一下系統 這些問題就能解決 並且還能讓電腦提速 誰能告訴我這個問題怎麼解決?15 關記憶體的什麼事,這是系統有漏洞或缺少外掛對某些軟體的不相容,問題是根本找不到相應的外掛,只能是重灌一個不同版本的系統。這個問題需要從以下幾方面逐項排查 ...

誰能告訴我魔獸世界術語問題啊,誰能告訴我魔獸世界該怎麼玩?

你這個有的說了 先說地名的吧 636f707962616964757a686964616f31333262343061 ag 奧格瑞瑪 sts 沙塔斯 s 斯通納德 jjg 荊棘谷 jjs 加基森 然後是各個職業 fs 法師 sm 薩滿 ss 術士 qs 騎士 xd 德魯伊 zs 戰士 ms 牧師 ...

誰可以把學C語言的心得告訴我

我去年考過了 我覺得是把基本的知識搞明白了 就把一個個例題都實踐 即上機分析書上的每個例題 都搞懂這個過程很重要 要學會那課本的c知識是不用電腦的,只要你真的看懂了書中的知識,看懂了那例子,我說的是真的懂!而不是半桶水而已,那你根本就無需背,你已經不知不覺記住了,但點很好的,你以後去上機,你就能寫出...