约瑟夫问题
来源:互联网 发布:域名注册服务商查询 编辑:程序博客网 时间:2024/06/07 17:10
题目描述
n个人想玩残酷的死亡游戏,游戏规则如下:
n个人进行编号,分别从1到n,排成一个圈,顺时针从1开始数到m,数到m的人被杀,剩下的人继续游戏,活到最后的一个人是胜利者。
请输出最后一个人的编号。
n个人进行编号,分别从1到n,排成一个圈,顺时针从1开始数到m,数到m的人被杀,剩下的人继续游戏,活到最后的一个人是胜利者。
请输出最后一个人的编号。
输入
输入n和m值。
输出
输出胜利者的编号。
示例输入
5 3
示例输出
4
提示
第一轮:3被杀第二轮:1被杀第三轮:5被杀第四轮:2被杀
#include <stdio.h>#include <malloc.h>struct mon *creat(int n);int g(struct mon *head,int m,int n);struct mon{ int num; struct mon *next;};int main(){ int n,m; struct mon *head; scanf("%d%d",&n,&m); head=creat(n); printf("%d",g(head,m,n)); return 0;}struct mon *creat(int n){ int i; struct mon *p,*tail,*head; p=(struct mon *)malloc(sizeof(struct mon)); p->num=1; p->next=NULL; head=p; tail=p; for (i=2;i<=n;i++) { p=(struct mon *)malloc(sizeof(struct mon)); p->num=i; tail->next=p; tail=p; p->next=NULL; } tail->next=head; return head;}int g(struct mon *head,int m,int n){ int num=0; int count=0; struct mon *p,*q; q=head; while(q->next!=head) q=q->next; while(count<n-1) { p=q->next; num++; if (num%m==0) { q->next=p->next; free(p); count++; } else q=p; } return q->num;}
0 0
- 约瑟夫问题、约瑟夫环
- 约瑟夫问题
- 约瑟夫问题
- 约瑟夫问题
- 约瑟夫问题
- 约瑟夫问题
- 约瑟夫问题
- 约瑟夫问题
- 约瑟夫问题
- 约瑟夫问题
- 约瑟夫问题
- 约瑟夫问题
- 约瑟夫问题
- 约瑟夫问题
- 约瑟夫问题
- 约瑟夫问题
- 约瑟夫问题
- 约瑟夫问题
- 期货的形成和发展
- chrome img.src=c:fakepth....
- RecycleView从显示到下拉刷新和加载更多
- php trim()函数
- jQuery插件编写的原理
- 约瑟夫问题
- NYOJ-35 表达式求值
- 1119 Collecting Coins 湖南省第八届
- poj2524 Ubiquitous Religions
- VS2013配置opencv
- [机器学习笔记]Note16--应用示例:图像文字识别
- 解决Emacs无法输入中文的问题
- CodeForces-696C Please(数学题,快速幂取模,乘法逆元)
- 1.搜索之路——Nutch与Lucene