#include <stdio.h>
#include <stdlib.h>
 
int main() 

 
   int k=0,n=0,s=0,m=0;           //k为1,2,3报数时的计数变量,m为退出人数
   int num [100];
   int *p=num;
   int i;
   printf("Enter the number of person and the key:");
   scanf("%d%d",&n,&s);
   for (i=0; i<n; ++i)
   { 
      *(p+i)=i+1;                //以1至n为序给每个人编号
   }                          
   i = 0;
   while (m<(n-1))              //当未退出人数大于1时执行循环体   (n-m) > 1
   {
      if (*(p+i)!=0)
          k++;
      if (k==s)                //对退出的人编号置为0
      {
          printf("%d\n",*(p+i));                     
          *(p+i)=0;
          k = 0;
          m++;
      }
       i++;
      if (n==i)               
           i = 0;               //报数到尾后,i恢复为0
    }
     while (*p==0)
        p++;
    printf("The last one is :%d\n",*p);
    system("PAUSE");     
    return 0;
}

======================================================
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <malloc.h>
 
/* 结构体和函数声明 */
typedef struct _node_t
{
    int             n_num;
    struct _node_t *next;
} node_t;
 
node_t         *node_t_create(int n);
node_t         *node_t_get(node_t **pn, int m);
 
node_t * node_t_create(int n)
{
    node_t *p_ret   = NULL;
 
    if (0 != n)
    {
        int     n_idx   = 1;
        node_t *p_node  = NULL;
 
        /* 构造 n 个 node_t */
        p_node = (node_t *) malloc(n * sizeof(node_t));
        if (NULL == p_node)
            return NULL;
        else
            memset(p_node, 0, n * sizeof(node_t));
 
        /* 内存空间 申请 成功 */
        p_ret = p_node;
 
 
        for (; n_idx < n; n_idx++)
        {
            p_node->n_num = n_idx;
            p_node->next = p_node + 1;
            p_node = p_node->next;
        }
        p_node->n_num = n;
        p_node->next = p_ret;
    }
 
    return p_ret;
}
 
 
int main()
{
    int     n, m;
    node_t *p_list, *p_iter;
    printf("Please enter the total and the key :");
    scanf("%d%d",&n,&m);
    printf("The total num is : %d \nThe   key   is   : %d \n",n,m);
 
    /* 构造环形单向链表 */
    p_list = node_t_create(n);
 
    /* Josephus 循环取数 */
    p_iter = p_list;
    m %= n;
    while (p_iter != p_iter->next)
    {
        int i   = 1;
 
        /* 取到第 m-1 个节点 */
        for (; i < m - 1; i++)
        {
            p_iter = p_iter->next;
        }
 
        /* 输出第 m 个节点的值 */
        printf("%d ", p_iter->next->n_num);
 
        /* 从链表中删除第 m 个节点 */
        p_iter->next = p_iter->next->next;
        p_iter = p_iter->next;
    }
    printf("%d ", p_iter->n_num);
 
    /* 释放 申请 的空间 */
    free(p_list);
 
    system("PAUSE");
}

转载于:https://blog.51cto.com/qq164587043/49490

分别用 数组和链表处理约瑟夫环问题相关推荐

  1. 单链表实现约瑟夫环问题

    经典的约瑟夫环问题,用单链表实现竟然这么简单!? 目录 前言 问题 思路 代码 前言 这两天想到了之前自己用数组实现约瑟夫环问题时写了好多的代码,然后想到数据结构中的但链表好像也可以实现,于是去实践了 ...

  2. 用链表实现约瑟夫环(没用)

    用链表实现约瑟夫环 Description 你听说过约瑟夫问题吗?问题大致如下:首先n个人围成一个圈,标记为1到n号.接着,从1号开始报数(从1开始),然后2号报数,然后3号...当有人报到到m时,这 ...

  3. C语言使用数组和循环解决约瑟夫环问题

    C语言使用数组和循环解决约瑟夫环问题 约瑟夫入狱,监狱内共有 33 个犯人.某日 33 名犯人围成一圈,从第一个犯人开始报数,报到数字 7 的犯人出列, 被枪毙,下一名犯人重新从 1 开始报数.依次类 ...

  4. 约瑟夫问题C语言加注释,用链表实现约瑟夫环【有注释,有很多注释】

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 主要问题在于删除约瑟夫环的数,结果一直出不来,看了好几天改了好几次都改不对 #include #include typedef struct ysf { ...

  5. 【算法-剑指 Offer】62. 圆圈中最后剩下的数字(环形链表;约瑟夫环;动态规划)

    剑指 Offer 62. 圆圈中最后剩下的数字 - 力扣(LeetCode) 发布:2021年9月12日12:18:52 问题描述及示例 0,1,···,n-1这n个数字排成一个圆圈,从数字0开始,每 ...

  6. java 单链表约瑟夫环_java循环单链表实现约瑟夫环问题

    package SingleLinkList; //节点类 class Node{ private int data; private Node next; public int getData() ...

  7. 【Java】单循环链表解决约瑟夫环问题

    问题描述 据说著名犹太历史学家 Josephus有过以下的故事:在罗马人占领乔塔帕特后,39 个犹太人与Josephus及他的朋友躲到一个洞中,39个犹太人决定宁愿死也不要被敌人抓到,于是决定了一个自 ...

  8. c语言循环单链表实现约瑟夫环问题

    题目: 约瑟夫(Joeph)问题的一种描述是:编号为1,2,-,n的n个人按顺时针方向围坐一圈,每人持有一个密码(正整数).一开始任选一个正整数作为报数上限值max,从第一个人开始按顺时针方向自1开始 ...

  9. java实现环形链表解决约瑟夫环问题

    什么是环形链表? 环形链表就是单向链表的基础上让链表的首尾相连,形成一个环,这就是一个循环链表. 什么是约瑟夫环问题? 约瑟夫环如下: 约瑟夫问题是个著名的问题:N个人围成一圈,第一个人从1开始报数, ...

最新文章

  1. Linux文件系统2---VFS的四个主要对象
  2. delete archivelog all 无法彻底删除归档日志?
  3. Lucene.Net---1索引的建立
  4. 【AI白身境】只会用Python?g++,CMake和Makefile了解一下
  5. onvif 客户端 linux,Linux下onvif客户端关于ipc摄像头的搜索
  6. MYSQL数据库VALUES_MYSQL入门大全来啦!
  7. 关于Python的应用发布技术
  8. 本周倔学 2019五月第三周
  9. es6 遍历 Symbol 属性名
  10. 也谈PostgreSQL的Vacuum机制及其最佳实践
  11. Java Web学习笔记11:JSTL与EL
  12. vue 指令 v-cloak
  13. 网页开发者模式调整到手机模式_苹果全球开发者大会将于6月22日召开 全线上模式...
  14. php模拟表单提交,php用fsockopen()函数实现模拟提交表单。
  15. [Verilog]4 选 1 数据选择器
  16. js实现双人对战五子棋
  17. 在线直播系统搭建的功能包含哪些?
  18. 数据格式化 string.format()
  19. 17计算机七班班级活动,2017班级主题活动方案设计
  20. 玩传奇的伙计们,很久没发朋友圈了吧,今天给大家找到一些朋友圈高逼格文案。

热门文章

  1. android qq红点,Android高仿QQ小红点功能
  2. linux java 获取路径怎么写_linux中java获取路径怎么写?
  3. 怎样取消连续包月自动续费_苹果手机连续包月会员怎么取消 设置iPhone解除应用自动续费...
  4. sqoop从mysql导入hdfs_sqoop 从mysql导入数据到hdfs、hive
  5. 怎么查看计算机的系统内存大小,Windows10系统怎么查看电脑内存大小
  6. java int转bitmap_Java Base64位编码与String字符串的相互转换,Base64与Bitmap的相互转换实例代码...
  7. 元组可以直接添加进数据库吗_数据库篇-第一章:数据库基本概念
  8. 阿里云rds for mysql平台介绍_阿里云RDS for MySQL 快速入门——笔记
  9. python可以做计量分析吗_技术分享 - python数据分析(2)——数据特征分析(上)...
  10. 华为python有必要学吗_【华为云技术分享】这个 Python 库有必要好好学学