C 语言实例 - 约瑟夫生者死者小游戏

每日一练:约瑟夫生者死者小游戏 约瑟夫问题(Josephus problem)是一个经典的数学和计算机科学问题,源于犹太历史学家弗拉维奥·约瑟夫斯(Flavius Josephus)的著作《犹太战记》。问题的描述如下:在这个问题中,有n个人站成一个圈,从1到n编号。从第一个人开始,每次数m个人,数到第m个人就将其从圈中删除,然后从下一个人开始重新数,重复这个过程,直到所有人都被删除。问题是,最后剩下的那个人的编号是多少?为了解决约瑟夫问题,可以使用递归或迭代的方法。 阅读详情

问题描述:

30 个人在一条船上,超载,需要 15 人下船。

于是人们排成一队,排队的位置即为他们的编号。

报数,从 1 开始,数到 9 的人下船。

如此循环,直到船上仅剩 15 人为止,问都有哪些编号的人下船了呢?

解题思路:

该问题中有两个状态,上船与下船,因此需要对这两个状态分别进行标记,常用的即0与1,另需一个记数变量来结束循环,剩余15人为止。另需一变量来表示报数值,并当报数值为9的时候进行状态更改操作。

给30个人编号1-30,使用数组a[30]={0}表示,用于存储每个人的报数值;

使用数组b[30]={0}标记每个人的状态,即在船上还是船下,,这里将每个人的初值标记为0(表示在船上)1表示下船;

i代表他们的编号,当i等于31时,手动将i置为1;

c代表被扔下船的人数(c=15时循环结束);

变量j用来记数,j=9时将对应编号i的人置 0(扔下船)并让j重新记数。

#include<stdio.h>
 
int c = 0;//c代表被扔下船的人数
int i = 1;
int j = 0;
int a[30] = { 0 };
int b[30] = { 0 };
 
int main()
{
    while (i<=31)
    {
        if (i == 31)//当i等于31时,手动将i置为1
        {
            i = 1;
        }
        else if (c == 15)//c=15时跳出循环,循环结束
        {
            break;
        }
        else
        {
            if (b[i] != 0)//b[i]为1时,表示此人已下船,i加1,check不增加,继续循环
            {
                i++;
                continue;
            }
            else
            {
                j++;
                if (j != 9)
                {
                    i++;
                    continue;
                }
                else //j=9时将对应编号i的人标记为1,并记录其报数值9
                {
                    b[i] = 1;
                    a[i] = j;
                    j = 0;
                    printf("第%d号下船了\n", i);
                    i++;
                    c++;
                }
            }
        }
    }
}

数据结构课程设计:约瑟夫生者死者游戏(c++实现、单循环链表、输出死者姓名和编号、附可执行源代码) c++、单循环链表)有N个旅客同乘一条船,因为严重超载,加上风高浪大,危险万分;因此船长告诉乘客,只有将全船一半的旅客投入海中,其余人才能幸免于难;无奈,大家只得同意这种办法,并议定N个人围成一圈,由第一个人开始,依次报数,数到第9人,便把他投入大海中,然后再从他的下一个人开始,数到第9人,再把他投入大海中,如此循环地进行,直到剩下N/2个乘客为止。问哪些乘客是将被投入大海的?输出这些乘客的姓名和位置。...... 阅读详情

相关推荐

c语言实现约瑟夫生者死者游戏(附有详细代码)

约瑟夫生者死者游戏的大意是:30个旅客同乘一条船,因为严重超载,加上风高浪大,危险万分;无奈,大家只得同意这种办法,并议定30个人围成一圈,由第一个人开始,依次报数,数到第9人,便把他投入大海中,然后从他的下一个人数起,数到第9人,再将他投入大海,如此循环,直到剩下15个乘客为止。问哪些位置是将被扔下大海的位置。本游戏的数学建模如下:假设n个旅客排成一个环形,依次顺序编号1,2,…从某个指定的编号开始,沿环计数,每数到第m个人就让其出列,且从下一个人开始重新计数,继续进行下去。

qq_62185081的博客 3085

约瑟夫死亡游戏(C语言代码)

约瑟夫生死游戏的C语言代码及设计思路及逻辑,循环链表的整体算法思想

C语言约瑟夫生者死者游戏(顺序存储结构)

C语言约瑟夫生者死者游戏(顺序存储结构)题目简介算法思路(1循环,3判断)流程图参考代码(C,使用VS_Code编写)反思 题目简介 (原题已河蟹) 30个人在一条船上,超载,需要15人下船。 于是人们排成一队,排队的位置即为他们的编号。 报数,从1开始,数到9的人下船。 如此循环,直到船上仅剩15人为止,问都有哪些编号的人下船了呢? 算法思路(1循环,3判断) 循环报数(遍历到最后一个再重新...

Yota Togashi 5498

约瑟夫死者游戏-C语言实现-双向循环链表

双向循环链表实现约瑟夫死者游戏

m0_62341336的博客 2887

约瑟夫生者死者小游戏

30 个人在一条船上,超载,需要 15 人下船。于是人们排成一队,排队的位置即为他们的编号。报数,从 1 开始,数到 9 的人下船。如此循环,直到船上仅剩 15 人为止,问都有哪些编号的人下船了呢?

入梦风行的博客 446

【C语言约瑟夫生者死者小游戏

个人认为这种小的编程题是非常考验思维能力和编程能力的,同时还能提升编程能力和体验编程的乐趣! 题目: 30 个人在一条船上,超载,需要 15 人下船。 于是人们排成一队,排队的位置即为他们的编号。 报数,从 1 开始,数到 9 的人下船。 如此循环,直到船上仅剩 15 人为止,问都有哪些编号的人下船了呢? 题目来源:菜鸟教程 我的解答: #define _CRT_SECUR...

IPv6 1252

c 语言数组实现约瑟夫生者死者小游戏

代码比较简单,直接上代码: #include <stdio.h> #include<stdlib.h> #include<string.h> int main(void) { //定义一个大小为31的数组,计数的时候使用1到30的地址,初始化所有在船上的状态为0 char arry[31] = {0}; //定义变量speek为报号数,变量i为他们的编号...

ytz201201的博客 819

约瑟夫生者死者小游戏C语言

如此循环,直到船上仅剩 15 人为止,问都有哪些编号的人下船了呢?30 个人在一条船上,超载,需要 15 人下船。于是人们排成一队,排队的位置即为他们的编号。printf("下船人的编号为:");报数,从 1 开始,数到 9 的人下船。

weixin_46124814的博客 556

C语言实例-约瑟夫生者死者小游戏

30个人在一条船上,超载,需要15人下船。于是人们排成一队,排队的位置即为他们的编号。报数,从1开始,数到9的人下船,如此循环,直到船上仅剩15人为止,问都有哪些编号的人下船了呢?

小程博客 939

吴裕雄--天生自然C语言开发约瑟夫生者死者小游戏

30 个人在一条船上,超载,需要 15 人下船。 于是人们排成一队,排队的位置即为他们的编号。 报数,从 1 开始,数到 9 的人下船。 如此循环,直到船上仅剩 15 人为止,问都有哪些编号的人下船了呢? #include<stdio.h> int c = 0; int i = 1; int j = 0; int a[30] = ...

weixin_30416497的博客 207

学习笔记1:Python-第一个自己编写的程序

Python-第一个自己编写的程序Python 约瑟夫生者死者小游戏前言题目:约瑟夫生者死者小游戏数学方案我的代码其中涉及到的坑,提一下看一下教材的代码(比我的简洁太多太多):笔记里更简洁的代码别人程序的学习笔记 Python 约瑟夫生者死者小游戏 前言 学习Python3有一两周的时间了,大学学的是C语言,而且学的不怎么样。现在步入中年,相比于那些陷入网剧、网文、钓鱼、花花草草什么的去打发时间的人来说,我现在倒是开始从头学习一门语言来充当这些事情。 当然作为一名佛系的学习菜鸟,在做一些简单的程序都会遇到很

hnaxucong的博客 256

牛刀小试 - 约瑟夫生者死者小游戏

【代码】牛刀小试 - 约瑟夫生者死者小游戏

weixin_43284350的博客 666

基于C语言实现的约瑟夫生者死者游戏

1 项目简介约瑟夫生者死者游戏的大意是:30个旅客同乘一条船,因为严重超载,加上风高浪大危险万分;因此船长告诉乘客,只有将全船一半的旅客投入海中,其余人才能幸免于难。无奈,大家只得统一这种方法,并议定30个人围成一圈,由第一个人开始,依次报数,数到第9人,便将他投入大海中,然后从他的下一个人数起,数到第9人,再将他投入大海,如此循环,直到剩下15个乘客为止...

211

约瑟夫生者死者游戏》算法 C语言

算法课上的一个小练习,线性结构的表示与实现之二-------顺序表的简单应用《约瑟夫生者死者游戏》     问题描述和求解思路在源码中已经注释出来了,进攻参考,后面的一份是一开始写的,效率极低,当做反面教材了。 #include /* 约瑟夫问题求解——数组存储方式算法 姓名:曹栋 题目描述: 约瑟夫生者死者游戏:30个旅客同乘一条船,因为严重超载,加上风高浪大,危险万分;因

曹栋的专栏 7471

约瑟夫死者小游戏

1.约瑟夫死者小游戏 (题目来自菜鸟教程) 30 个人在一条船上,超载,需要 15 人下船。 于是人们排成一队,排队的位置即为他们的编号。 报数,从 1 开始,数到 9 的人下船。 如此循环,直到船上仅剩 15 人为止,问都有哪些编号的人下船了呢? 2. 写BUG 2020年3月25日 今天在学C的时候,绞尽脑汁想到了这方法,然后又把脑汁发酵,也没查出来这BUG出在哪里,一上午就这样过去了...

cula的博客 2195

C,C++,python实现约瑟夫生者死者小游戏

先看看题目: 30人在一条船上,超载,需要15人下船,于是人们排成了一队,排队的位置即为他们的编号,从第一个开始报数,从1数到9,数到9的人下船,如此循环往复,直到船上仅剩下15人为止,那么有哪些人下船呢? 1.用C语言实现: #include<stdio.h> int c = 0; int i = 1; int j = 0; int a[30] = { 0 }; int b[30] = { 0 }; int main() { while (i<=31) {

qq_44176343的博客 1万+

C语言 约瑟夫生者死者游戏

约瑟夫生者死者游戏这个代码要整理好思路

m0_50497042的博客 675
上一篇: c语言中%2d是什么意思?
下一篇: C语言练习题-数组指针,多维数组
bbgbbx
博客等级 码龄9年 4粉丝 4原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值