链表I 约瑟夫问题(删除+计数!典题)
来源:互联网 发布:nginx 二级域名转发 编辑:程序博客网 时间:2024/06/18 17:05
Problem Description
n个人想玩残酷的死亡游戏,游戏规则如下:
n个人进行编号,分别从1到n,排成一个圈,顺时针从1开始数到m,数到m的人被杀,剩下的人继续游戏,活到最后的一个人是胜利者。
//m的倍数!!
请输出最后一个人的编号。
Input
输入n和m值。
Output
输出胜利者的编号。
Example Input
5 3
Example Output
4
#include <stdio.h>#include <stdlib.h>struct node{ int data; struct node *next;};struct node *creat(int n) //建立数据域从1递增的顺序循环链表{ struct node *p,*head,*tail; int i; p = (struct node *)malloc(sizeof(struct node)); p->data = 1; p->next = NULL; head = p; tail = p; for(i=2; i<=n; i++) { p = (struct node *)malloc(sizeof(struct node)); p->data = i; p->next = NULL; tail->next = p; tail = p; } tail->next = head; //循环链表!! return(head);};int del(struct node *head,int m,int n){ struct node *p,*q; int num=0,count=0; //num表示报数的计数变量。Count表示删去的数量。 q = head;while(q->next!=head) //可以用更好的办法!!!Num=1;q=head;即可 { //q为前驱结点 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->data);}int main(){ int n,m; struct node *head; scanf("%d %d",&n,&m); head = creat(n); printf("%d\n",del(head,m,n)); return 0;}
阅读全文
0 0
- 链表I 约瑟夫问题(删除+计数!典题)
- 问题 I: 约瑟夫问题
- 约瑟夫问题I
- 约瑟夫问题I
- 约瑟夫问题I
- 约瑟夫问题I/II
- 在线编程--约瑟夫问题I
- N人围圈,报数删除问题(约瑟夫问题)
- HNU OJ题库 1008I约瑟夫问题
- 约瑟夫问题(链表):不敢死队问题
- java链表 约瑟夫问题
- 链表---约瑟夫问题
- 约瑟夫(Joseph)问题
- 约瑟夫问题(c++)
- 约瑟夫问题(数组)
- 约瑟夫问题(单链表)
- 约瑟夫问题(数组)
- 约瑟夫(Josephus)问题
- AI:虚拟鱼的遗传演化
- 设计模式——代理模式
- 链表H 链表的逆置
- 值得推荐的C/C++框架和库
- [siggraph17]decima engine的光照和aa技术
- 链表I 约瑟夫问题(删除+计数!典题)
- hdfs rack机架感知配置
- ubuntu下安装网易云音乐
- OSI网络体系结构
- 黑客技术 —— Linux 命令行
- 链表J 不敢死队问题
- 第四课、C程序结构
- 性能核心概念
- 慎用Servlet成员变量-导致线程安全问题