データ構造実践プロジェクトのロシアのルーレット賭けゲーム
39829 ワード
ロシアのルーレット賭博は、多くの人が聞いたことがあるだろう.残忍な賭博ゲームだ.ゲームの道具は左輪ピストルで、そのルールも簡単です.左輪ピストルの6つの弾槽に1つ以上の弾丸を勝手に入れ、回転輪を任意に回転させた後、回転輪を閉めます.ゲームの参加者は交代でピストルを自分に向けて、引き金を引く:銃に当たったり、怯えたりして、負けた側です.最後まで頑張れば勝者だ.
本節の実践項目はラウンド賭けと似ています.
ゲームのルール
:n人の参加者は1つのリングに並んで、毎回司会者が左輪ピストルに弾丸を入れて、ランダムに回転して回転輪を閉めて、ゲームは最初の人から、交代で銃を持っています.撃たれた者は賭博テーブルを脱退し、脱退した者の次の人は第一人者として次のゲームを開始する.最後に残りの一人が勝者になるまで.要求:ルーレットのゲームルールをシミュレートし、ゲームの最終勝者を見つける.
せっけい構想
同様の問題を解決するには、リニア・テーブルを用いたシーケンス・ストレージ構造とチェーン・ストレージ構造の両方が実現され、ゲームのルールに従って、チェーン・ストレージ構造を使用する場合、ループ・チェーン・テーブルを使用するだけで簡単に問題を解決できます.
シーケンスストレージ構造シミュレーションホイール賭け
シーケンスストレージ構造を採用する場合も、配列の先頭と末尾を頭の中で接続します.すなわち、配列の最後の位置から次の位置を探す必要がある場合、配列の最初の位置にジャンプすることができます.(余剰演算で解決)
実装コードは次のとおりです.
本節の実践項目はラウンド賭けと似ています.
ゲームのルール
:n人の参加者は1つのリングに並んで、毎回司会者が左輪ピストルに弾丸を入れて、ランダムに回転して回転輪を閉めて、ゲームは最初の人から、交代で銃を持っています.撃たれた者は賭博テーブルを脱退し、脱退した者の次の人は第一人者として次のゲームを開始する.最後に残りの一人が勝者になるまで.要求:ルーレットのゲームルールをシミュレートし、ゲームの最終勝者を見つける.
せっけい構想
同様の問題を解決するには、リニア・テーブルを用いたシーケンス・ストレージ構造とチェーン・ストレージ構造の両方が実現され、ゲームのルールに従って、チェーン・ストレージ構造を使用する場合、ループ・チェーン・テーブルを使用するだけで簡単に問題を解決できます.
シーケンスストレージ構造シミュレーションホイール賭け
シーケンスストレージ構造を採用する場合も、配列の先頭と末尾を頭の中で接続します.すなわち、配列の最後の位置から次の位置を探す必要がある場合、配列の最初の位置にジャンプすることができます.(余剰演算で解決)
実装コードは次のとおりです.
#include
#include
#include
typedef struct gambler{
int number;
}gambler;
int main(){
int n;
int round=1;
int location=1;
int shootNum;
int i,j;
srand((int)time(0));// ( , , )
printf(" :");
scanf("%d",&n);
printf(" 1-%d
",n);
gambler gamblers[n+1];//
for (i=1;i<=n; i++) {//
gamblers[i].number=i;
}
// ,
while (n!=1) {
printf(" %d , %d ,",round,gamblers[location].number);
shootNum=rand()%6+1;
printf(" %d
",shootNum);
for (i=location; i<location+shootNum; i++);// (i-1 , i )
i=i%n;// , i
if (i==1 || i==0) {// i=1 i=0 , , i
i=n+i;
}
printf(" %d , :
",gamblers[i-1].number);
// , ,
for (j=i-1; j+1<=n; j++) {
gamblers[j]=gamblers[j+1];
}
n--;// n n-1
for (int k=1; k<=n; k++) {
printf("%d ",gamblers[k].number);
}
printf("
");
location=i-1;//location
// location
if (location>n) {
location%=n;
}
round++;
}
printf(" :%d
",gamblers[1].number);
}
:
:5
1-5
1 , 1 , 4
4 , :
1 2 3 5
2 , 5 , 6
1 , :
2 3 5
3 , 2 , 2
3 , :
2 5
4 , 5 , 5
5 , :
2
:2
, , 。
:
- #include
- #include
- #include
- typedef enum {false,true} bool;
-
- typedef struct line{
- int No;
- struct line * next;
- }line;
-
- // ,
- void initLine(line ** head,int n){
- *head=(line*)malloc(sizeof(line));
- (*head)->next=NULL;
- (*head)->No=1;
- line * list=*head;
- for (int i=1; i<n; i++) {
- line * body=(line*)malloc(sizeof(line));
- body->next=NULL;
- body->No=i+1;
- list->next=body;
- list=list->next;
- }
- list->next=*head;//
- }
- //
- void display(line * head){
- line * temp=head;
- while (temp->next!=head) {
- printf("%d ",temp->No);
- temp=temp->next;
- }
- printf("%d
",temp->No);
- }
-
- int main() {
- line * head=NULL;
- srand((int)time(0));
- int n,shootNum,round=1;
- printf(" :");
- scanf("%d",&n);
- initLine(&head,n);
- line* lineNext=head;//
- // , ,
- while (head->next!=head) {
- printf(" %d , %d ,",round,lineNext->No);
- shootNum=rand()%n+1;
- printf(" %d
",shootNum);
- line *temp=lineNext;
- // ,
- for (int i=1; i<shootNum-1; i++) {
- temp=temp->next;
- }
- // ,
- printf(" %d , :
",temp->next->No);
- line * del=temp->next;
- temp->next=temp->next->next;
- if (del==head) {
- head=head->next;
- }
- free(del);
- display(head);
- //
- lineNext=temp->next;
- round++;//
- }
- printf(" :%d
",head->No);
- return 0;
- }
の :
ギャンブラー の :5
1ラウンド から、 1の から、 は4 の き を くと ります
4の は を し、 りの の は の りである.
1 2 3 5
2ラウンド から、 5の から、 は3 の き を くと ります
2の は を し、 りの の は の りである.
1 3 5
3ラウンド から、 3の から、 は4 の き を くと ります
3 の は を し、 りの の は の りである.
1 5
4ラウンド から、 5の から、 は4 の き を くと ります
1の は を し、 りの の は の りである.
5
に した の は:5です.
まとめ
このセクションでは、ホイール けの さなゲームを りて、リニアテーブルの ストレージ とチェーンストレージ を し、プロジェクトの に じて2つの コードの を で することができれば、 の の に に ることができます.