约瑟夫问题-链表+队列实现
来源:互联网 发布:淘宝旺铺基础班 编辑:程序博客网 时间:2024/04/29 16:45
和之前说的猴子选大王一样,一共N个人报数,报道M的人出列,之后继续从1开始报数,直到最后就剩一个人
之前说了一下数组的实现方法,其实还有很多实现的方法,这里说一下链表剔除的方法以及C++队列函数的实现方法
先说链表实现吧
#include<stdio.h>#include<malloc.h>#define LEN sizeof(struct monkey)struct monkey{ int num; struct monkey*next;};struct monkey*creat(int n){ int i; struct monkey*head,*p1,*p2; head=NULL; /*先建立一个空链表*/ for(i=1;i<=n;i++) { p1=(struct monkey*)malloc(LEN); p1->num=i; /*下面就是动态的建立链表了!*/ if(i==1) head=p1; else p2->next=p1; p2=p1; } p2->next=head;/*最后一个猴子的下一个又是第一个猴子,围成一个环*/ return head;}struct monkey *cut(struct monkey*head,int n){ int m,i=1; /*第一个猴子已经数了一个数了*/ struct monkey *p1,*p2,*p3; scanf("%d",&m); if(m==1)/*特殊情况的单独考虑*/ { printf("%d",n); return 0; } p1=head; while(n>1) { if(i==m-1) { /*删除链接的办法剔除猴子*/ p1->next=p1->next->next; i=0; /*然后后面的猴子数数*/ n--; } else {/*那么就开始数数*/ i++; p1=p1->next; } } printf("%d",p1->num); free(p1);}int main(){ struct monkey*head,*p; int n; scanf("%d",&n); head=creat(n); p=cut(head,n); return 0;}
下面说一下队列实现吧,这里先给大家介绍一下C++的队列函数
queue<int>x 定义一个名字为x的队列
x.front() 这个队列的第一个元素
x.pop()删除队首元素
x.pop(*) 往队列最后插入元素(*代表元素)
下面给出代码
#include<stdio.h>#include<string.h>#include<iostream>using namespace std;#include<queue>int main(){ int m,n; int i; while(scanf("%d%d",&n,&m)!=EOF) { queue<int>monkey;/*定义在内部每次初始化*/ for(i=0;i<n;i++) monkey.push(i+1); /*这里就要往队列里加猴子了*/ while(n>1) { for(i=1;i<m;i++) { monkey.push(monkey.front());/*没有数到m的猴子放到队列后*/ monkey.pop ();/*在队列前删除这个猴子*/ /*这两步其实就等于将一个猴子移动到了队列之后*/ } monkey.pop();/*删除数到m的猴子*/ n--; } printf("%d\n",monkey.front()); } return 0;}约瑟夫问题其实是一个很有意思的问题,还有一些公式解法,在这里就不多说了~
0 0
- 约瑟夫问题-链表+队列实现
- 队列实现约瑟夫问题
- poj 3254约瑟夫问题(队列实现)
- 算法第四版约瑟夫问题队列实现
- 队列与约瑟夫问题
- 循环队列 约瑟夫问题
- 桟和队列--约瑟夫问题
- 桟和队列--约瑟夫问题
- 简单约瑟夫环【队列实现】
- 约瑟夫环的队列实现
- 约瑟夫环 (队列实现)
- 约瑟夫问题C++实现
- 约瑟夫问题C++实现
- “约瑟夫问题”实现代码
- 约瑟夫问题的实现
- 约瑟夫问题程序实现
- java实现约瑟夫问题
- 约瑟夫问题的实现
- 黑马程序员_List集合容器
- Ubuntu 软件包管理详解
- UNDO段头块格式深度解析
- vim字符编码终极方案
- 2.thinkphp运行原理与配置
- 约瑟夫问题-链表+队列实现
- 2013年第4季度抽油烟机品牌网络知名度排名
- 10 Easy Steps to a Complete Understanding of SQL
- 利用HttpClient进行http文件上传
- 如何让块级元素在页面中上下居中
- mysql-5.5.25a源码编译
- openwrt 中 uhttpd 自动跳转到 /cgi-bin/luci
- Java文件操作2——文件I/O流
- Hibernate中的DAO操作的findByExample