DS實驗題 擊鼓傳花

2022-02-06 17:32:38 字數 1654 閱讀 3947

// ds-擊鼓傳花

//// created by wasdns on 16/11/9.

//#include #include #include #include #include using namespace std;

int killman[1000]; //killer and alive man

int main()

if (killman[turn] == -1)

cnt++; //指向的人還活著,更新計數器

if (cnt == m)

turn++; //遊戲還沒有結束,指標後移

}cout << rcd << endl; //最後一位同學假死,存活

return 0;

}

結果:

//

// main2.cpp

// ds-擊鼓傳花

//// created by wasdns on 16/11/9.

//#include #include #include #include #include using namespace std;

struct killman ;

/* 建立迴圈鍊錶:

*/killman* creatcircle(int n)

p1 -> next = k;

return k;}/*

根據題目要求,找到開始節點的前乙個節點。

目的是為了刪除第乙個節點。

*/killman* findkpre(killman *k)

return p;}/*

殺人遊戲主體:

*/int killgame(killman *k, int m)

if (p2 -> next == p2) break; //當出現回環(loop)的時候:

//說明只剩下當前節點,遊戲結束。

cnt++; //計數器尚未溢位,指標前移,更新計數器。

p2 -> next = p1;

p2 = p1;

p1 = p1 -> next;

}return p1 -> num; //返回遊戲的贏家}/*

debug,輸出環形鍊錶:

*/void kprint(killman *k)

}int main()

結果:

此題是經典的約瑟夫問題,採用adt表,有兩種實現方法:(1)指標實現 (2)陣列實現。

需要注意的點是:

可以看到,使用環形鍊錶的效能更優,但是實現相比陣列而言更加複雜。

2016/11/9

擊鼓傳花 Python

有多少種不同的方法可以使得從小賽手裡開始傳的花,傳了m次以後,又回到小賽手裡。對於傳遞的方法當且僅當這兩種方法中,接到花的同學按接球順序組成的序列是不同的,才視作兩種傳花的方法不同。比如有3個同學1號 2號 3號,並假設小賽為1號,花傳了3次回到小賽手裡的方式有1 2 3 1和1 3 2 1,共2種...

coro學習 擊鼓傳花

這個是協程的經典例子。之前有一篇erlang和stackless比較的文章有詳細介紹。用perl的coro實現了一下。程式沒有很好地優化架構,不過便於閱讀。usr bin env perl coro測試程式testcoro11.pl perl版的擊鼓傳花 erlang和stackless的經典例子 ...

題目 《擊鼓傳花》

description 設有n個人圍成乙個圈,每人手裡都握著乙個令牌寫明乙個數字 隨機生成的 從第乙個人開始玩 擊鼓傳花 遊戲,第乙個擊的次數為其令牌上寫明的數字數 假設為m1 第m1個人出列。下次再從第m1 1個人開始新的 擊鼓傳花 擊的次數也為其令牌上寫明的次數,等於該次數的人出列。重複以上過程...