线性表之俄罗斯轮盘赌小游戏(C语言实现,详细注释版)

在我们学习了线性表一段时间后,来试图实现“俄罗斯轮盘赌”这个小游戏,很多人应该都在电影里见过图1这样的游戏场景。游戏的道具是一把左轮手枪,其规则也很简单:在左轮手枪中的 6 个弹槽中随意放入一颗或者多颗子弹,在任意旋转转轮之后,关上转轮。游戏的参加者轮流把手枪对着自己,扣动扳机:中枪或是怯场,即为输的一方;坚持到最后的即为胜者。图1 俄罗斯轮盘赌解题思路解决此似问题的核心在于建立轮流循环机...
摘要由CSDN通过智能技术生成

在我们学习了线性表一段时间后,来试图实现“俄罗斯轮盘赌”这个小游戏,很多人应该都在电影里见过图1这样的游戏场景。游戏的道具是一把左轮手枪,其规则也很简单:在左轮手枪中的 6 个弹槽中随意放入一颗或者多颗子弹,在任意旋转转轮之后,关上转轮。游戏的参加者轮流把手枪对着自己,扣动扳机:中枪或是怯场,即为输的一方;坚持到最后的即为胜者。
在这里插入图片描述

图1 俄罗斯轮盘赌

解题思路

解决此似问题的核心在于建立轮流循环机制,使用线性表的顺序存储结构和链式存储结构都能实现,根据游戏规则,采用顺序存储结构时,必须使数组的首尾建立连接,即当需要从数组中最后一个位置寻找下一个位置时,要能够跳转到数组的第一个位置(使用取余运算可以解决)。采用链式存储结构时,只需将链表首尾相连,使用循环链表即可轻松解决问题。

同时我们应该明白,采用链式存储结构对于求此类问题是最容易理解的,同时也避免了当参与人数较多时,不必像顺序存储结构那样,因为删除某个游戏成员而频繁地移动其他游戏成员数据。

顺序存储结构模拟轮盘赌

具体C语言实现代码如下:

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

typedef struct GameMan{
   
    int number;
}GameMan;

int main(){
   
    int PersonNum;//游戏人数 
    int round=1;//游戏回合 
    int PersonPos=1;//起始人位置 
    int BulletPos;//子弹位置 
	int i;//中枪人位置
    srand((int)time(0));//使用当前时间作为rand()函数的随机数的种子
	printf("请输入本次游戏人数(<100): ");
    scanf("%d",&PersonNum);
    printf("\n为编号为 1-%d 的游戏人员分配位置!\n\n",PersonNum);
    GameMan GameMans[100];//存储游戏人员编号的数组
    for (int j=1;j<=PersonNum;j++) {
   //依次为参加者分配编号
        GameMans[j].number=j;
    }
    //当只剩余一个人时,此场结束
    while (PersonNum!=1) {
   
        BulletPos=rand
  • 2
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值