约瑟夫问题
来源:互联网 发布:推荐网络教育的理由 编辑:程序博客网 时间:2024/06/05 22:44
约瑟夫问题
Time Limit: 1000MSMemory Limit: 65536KB
Problem Description
n个人想玩残酷的死亡游戏,游戏规则如下:
n个人进行编号,分别从1到n,排成一个圈,顺时针从1开始数到m,数到m的人被杀,剩下的人继续游戏,活到最后的一个人是胜利者。
请输出最后一个人的编号。
n个人进行编号,分别从1到n,排成一个圈,顺时针从1开始数到m,数到m的人被杀,剩下的人继续游戏,活到最后的一个人是胜利者。
请输出最后一个人的编号。
Input
输入n和m值。
Output
输出胜利者的编号。
Example Input
5 3
Example Output
4
Hint
第一轮:3被杀第二轮:1被杀第三轮:5被杀第四轮:2被杀
代码如下:
#include<stdio.h>#include<stdlib.h>#include<string.h>struct node{ int num; struct node *next;};struct node *creat(int n){ int i; struct node *head,*p,*q; p=(struct node *)malloc(sizeof(struct node)); p->num=1; p->next=NULL; head=p; q=p; for(i=2; i<=n; i++) { p=(struct node *)malloc(sizeof(struct node)); p->num=i; q->next=p; q=p; p->next=NULL; } q->next=head; return head;}int sel(struct node *head,int m,int n){ int num=0; struct node *p,*q; q=head; while(q->next!=head) { q=q->next; } while(q->next!=q) { p=q->next; num++; if(num%m==0) { q->next=p->next; free(p); } else q=p; } return q->num;}int main(){ int n,m; struct node *head; scanf("%d%d",&n,&m); head=creat(n); printf("%d\n",sel(head,m,n)); return 0;}
1 0
- 约瑟夫问题、约瑟夫环
- 约瑟夫问题
- 约瑟夫问题
- 约瑟夫问题
- 约瑟夫问题
- 约瑟夫问题
- 约瑟夫问题
- 约瑟夫问题
- 约瑟夫问题
- 约瑟夫问题
- 约瑟夫问题
- 约瑟夫问题
- 约瑟夫问题
- 约瑟夫问题
- 约瑟夫问题
- 约瑟夫问题
- 约瑟夫问题
- 约瑟夫问题
- 高精度乘法
- java设计模式—状态模式
- sql 百万级数据库优化方案
- 414. Third Maximum Number
- 获取音、视频时长(NAudio,Shell32,FFmpeg)
- 约瑟夫问题
- HTML一个页面头部的大概内容
- C++中,debug编译成功,为什么release模式编译报错
- 这篇文章为了请教大牛帮忙解决一下现网乱码问题
- 创建存储过程
- nodejs+mongodb写的一个简单的登录注册
- 【Linux】进程间通信(IPC)之匿名管道和命名管道以及测试用例
- windows phone获取GPS地理位置信息
- 【linux】守护进程