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知識是不用電腦的,只要你真的看懂了書中的知識,看懂了那例子,我說的是真的懂!而不是半桶水而已,那你根本就無需背,你已經不知不覺記住了,但點很好的,你以後去上機,你就能寫出...