什么时约瑟夫环问题?

约瑟夫问题,是一个计算机科学和数学中的问题,在计算机编程的算法中,类似问题又称为约瑟夫环,又称“丢手绢问题”。

问题的大致内容就是:一共有N个人,从1开始报数,报到p的人出局,之后下一个人再从1开始报数,同样报到p的人出局,直到只剩最后一个人为止,那剩下的这一个人就是胜利者。

示例图:

此图中,外围数字为对应人的出出局顺序

当然原问题是比较简单的,那如果按退出顺序输出每个退出人的原序号该怎么实现呢?

问题分析:

1、如何判断出局

这里我们可以定义一个数组(长度视情况而定)可以将数组初始化为0,定义k来表示数组成员的报数,每次循环时k++,然后判断k是否等于p,若等于p则让arr[i] = 1;那么下次循环时判断arr[i]的值,若为1则跳过该元素。

2、如何循环

在此问题中,不是简单的对数组进行遍历,所以再想用for(i = 0;i <n;i++)显然是行不通的,

那我们该如何进行循环呢?

这里我们定义count来记录已经淘汰的人数,当淘汰人数count = n时则结束循环。

那么新的问题又出现了,当进行到最后一个人时如何返回从第一个人开始呢?

3、如何返回重新开始

其实这个问题不难解决,我们可以定义一个temp = n,在循环的最后判断i的值,如果i==temp,

这令i=0;就可以重新开始了。

OK主要问题就分析完了,话不多说,直接上代码。

代码:

#include <stdio.h>
#define N 3000void joseph(int *arr,int n,int p);
int main()
{int arr[N] = {0};int n,p;printf("请输入参加人数n和淘汰条件:");scanf("%d %d",&n,&p);printf("淘汰循序: ");joseph(arr,n,p);return 0;
}
void joseph(int *arr,int n,int p)
{int count,k,i,b;count = 0;        //记录出局的人数 k = 0;           //每个成员报的数i = 0;int temp;temp = n;/*这里定义temp的值为总人数是为了当数组遍历到最后一个后再回到第一个即:当 i == temp时  令 i = 0; */ while(count < n){if(arr[i] == 0){k++;if(k == p){arr[i] = 1;b = i+1;printf("%d ",i+1);count++;k = 0;}}i++;if(i == temp){i = 0;} }}

C语言解决经典问题约瑟夫环--数组相关推荐

  1. 2018沈阳k(经典的约瑟夫环)

    地址 K Let the Flames Begin 首先,对于经典的约瑟夫环问题,我们记f(n,m)f(n,m)f(n,m)表示初始有nnn个人,第mmm个出队的人是谁(从0号开始报数).则有递推式f ...

  2. c语言约瑟夫环问题,C++_详解约瑟夫环问题及其相关的C语言算法实现,约瑟夫环问题 N个人围成一圈 - phpStudy...

    详解约瑟夫环问题及其相关的C语言算法实现 约瑟夫环问题 N个人围成一圈顺序编号,从1号开始按1.2.3......顺序报数,报p者退出圈外,其余的人再从1.2.3开始报数,报p的人再退出圈外,以此类推 ...

  3. 【算法经典】 约瑟夫环问题

    [前言]本文讨论经典算法问题约瑟夫环问题的递归解法. 一.问题描述 作为算法中的经典问题,约瑟夫环问题自诞生以来有各种各样的变种描述,丢手绢.游戏获胜者.圆圈中最后剩下的数字.点名游戏等等,但都是同样 ...

  4. C语言 (编程题:约瑟夫环 报数游戏)

    1.前言 最近有点emo,写博客也没有什么特别想写的内容 这篇博客把约瑟夫环用C语言来写一下 巩固一下原来学过的知识. 2.什么是约瑟夫环 这有个历史故事还是比较有意思的:据说著名犹太历史学家Jose ...

  5. 约瑟夫环-(数组、循环链表、数学)

    约瑟夫环(约瑟夫问题)是一个数学的应用问题:已知n个人(以编号1,2,3...n分别表示)围坐在一张圆桌周围.从编号为k的人开始报数,数到m的那个人出列:他的下一个人又从1开始报数,数到m的那个人又出 ...

  6. python约瑟夫环_Python语言之如何实现约瑟夫环问题

    本文Python语言实例讲述了Python实现约瑟夫环问题的方法.分享给大家供大家参考,希望对大家学习Python语言有所帮助,具体如下: 题目:0,1,...,n-1这n个数字排成一个圆圈,从数字0 ...

  7. 约瑟夫环双向链表c语言实,双向链表与约瑟夫环代码

    双向链表 //注意:该文件操作的链表为带头结点双向链表,头结点数据为-1 #include #include #include #define OK 1 #define ERROR 0 typedef ...

  8. 猫抓老鼠c语言程序,猫抓老鼠问题C++实现一例(约瑟夫环问题)

    今天偶然在网上看到了猫抓老鼠问题, 当时也没多想,只觉得网上给出的程序的确有很多需要改进的地方, 就闷头闷脑的用 循环链表 和 递归 写了一个算法实现,后来发现 这个问题实际上是经典的约瑟夫环问题的变 ...

  9. 约瑟夫环问题(递推公式)

    约瑟夫环问题在==<具体数学>==一书上讲得十分详细 基本问题描述: 已知n个人(以编号1,2,3-n分别表示)围坐在一张圆桌周围.从编号为1的人开始报数,数到m的那个人出列:他的下一个人 ...

最新文章

  1. leetcode 5. Longest Palindromic Substring 字符串中的最长回文数 逐步从O(n^2)优化至线性时间
  2. 【数据中台】关于数据中台系统,需要了解哪些技术?
  3. 算法导论之动态规划(最长公共子序列和最优二叉查找树)
  4. C++代码片段(一)萃取函数返回值类型,参数类型,参数个数
  5. 99.999%,提升ElasticSearch稳定性的秘密
  6. [文摘20080428]无线局域网的相关网络安全技术应用指南
  7. AviSynth——多种字幕效果伪实现方法
  8. 【hive】hive权限
  9. 阿里云服务器18个数据中心测试IP地址以及测试方法
  10. STM32工作笔记0074---UCOSIII 任务管理(中)
  11. sklearn中的Linear_model的score函数讲解
  12. 使用PO+跨平台改造Macaca示例(APP端)
  13. 2020级C语言大作业 - 丛林大作战
  14. [转载] python异常和错误有什么区别_python的错误和异常
  15. 使用PowerShell 导出Exchange中的用户中用户信息到Office 365
  16. 【数学逻辑思维】A 好玩的数独游戏——002
  17. 商品分类无限层级递归
  18. Excel一键取消合并单元格并向下填充相同的内容
  19. kappa一致性检验教程_[转载]Kappa一致性检验
  20. 监控你的App使用行为

热门文章

  1. HDFS中四个核心的设计
  2. 阿里云MQTT_Password工具下载地址
  3. Mentor Graphics IPC-7351 LP Viewer 10.5使用说明
  4. DAB-Deformable-DETR代码学习记录之模型构建
  5. 一文读懂:CDN,P2P和PCDN
  6. MeterSphere一站式开源持续测试平台
  7. 支付服务-----功能实现逻辑
  8. java秒表计时器_Java-计时器/秒表GUI
  9. 想敲代码又怕女朋友找?那就让她去玩桌面图标贪吃蛇,再也不用担心打扰自己敲代码了
  10. Altium FPC软硬结合板日志