C语言解决"约瑟夫问题"
发布网友
发布时间:2022-04-22 01:04
我来回答
共3个回答
热心网友
时间:2022-04-22 02:33
#include<stdio.h>
struct list//建立一个结构体,包括每个人的编号,密码和下一级的指针
{
int id;
struct list *next;
};
list* input(int n)//链表的初始化
{
list *p,*q,*l;
int i,m;
p=new list;
l=new list;
l->next=NULL;
p=l;
p->id=1;//第一个人的初始化
for(i=2;i<=n;i++)//第二个人到第num个人的初始化
{
q=new list;
q->id=i;
q->next=NULL;
p->next=q;
p=q;
}
p->next=l;//使表尾指向表头,成循环链表
return p;
}
int main()
{
int num,m1,i;
list *q,*p;
printf("输入人数:");
while(scanf("%d",&num)!=EOF)
{
printf("密码为:");
scanf("%d",&m1);
p=input(num);
printf("最后一人序号为:");
while(p->next!=p)
{
for(i=1;i<=m1;i++)
{
q=p;
p=p->next;
}
q->next=p->next;
delete p;
p=q;
}
printf("%4d",p->id);
delete p;
printf("\n");
}
}
热心网友
时间:2022-04-22 03:51
#include <stdio.h>
int main(void)
{
int n, m, i, s=0;
printf ("N M = "); scanf("%d%d", &n, &m);
for (i=2; i<=n; i++) s=(s+m)%i;
printf ("The winner is %d\n", s+1);
}
参考资料:http://ke.baidu.com/view/717633.htm
热心网友
时间:2022-04-22 05:26
#include <stdio.h>
void main()
{
int n, i,m,p,k;
while(scanf("%d%d",&n,&m)!=EOF&&n&&m)
{
i=0;
while(++i<=n)
{
p=i*m;
while (p>n)
p=p-n+(p-n-1)/(m-1);
}
printf("%d\n",(p-1)%n+1);
}
}
c语言解决约瑟夫问题
用c语言解决约瑟夫问题的方法如下:用单循环链表来解决这一问题,实现的方法首先要定义链表结点;单循环链表的结点结构与一般单链表的结点结构完全相同,只是数据域用一个整数来表示;将它们组成一个单循环链表。接下来从位置为1的结点开始数,数到第m的下一个结点,就将下一个结点从循环链表中删除;从...
C语言-有趣的约瑟夫问题及解决办法
约瑟夫问题的数学解决方案多种多样,这里提供一种使用循环链表的方法。此方法基于原始问题中的圆圈排列,通过循环链表实现数人与淘汰的过程。编写一个程序,根据特定规则运行,即可模拟出约瑟夫问题的解。程序源代码如下,通过调整Start、Count、length这三个参数,可以改变游戏规则,尝试不同的初始位置和人数。...
约瑟夫环问题怎么解决啊?请用C语言写代码,谢谢!
include"MyNode.h" //文件1 Node::Node( ){ next = NULL;} Node::Node(Node_entry item, Node *add_on){ entry = item;next = add_on;} --- include<iostream.h> //文件2 typedef int Node_entry;struct Node { // data members Node_entry entry;Node *next;// constructor...
求C语言 约瑟夫教徒问题 可运行的代码
include <stdio.h> include <conio.h> include <malloc.h> define N 9 define OVERFLOW 0 define OK 1 int KeyW[N] = {4,7,5,9,3,2,6,1,8};typedef struct LNode { int keyword;struct LNode *next;}LNode,*LinkList;void Joseph(LinkList p,int m,int x){ LinkList q;int ...
求解一个C语言问题
约瑟夫的问题十分有名.对那些人,他们不熟悉这个最初的问题:在n个人中,取名为1,2,...,n,站成一个圆圈每m个人将被处死及只有最后剩下的那个人会被救活,约瑟夫很聪明地选择了最后剩下的那个人的位置,这样留下了他的性命让我们知道这个事件.比如当n = 6和m=5则这些人中取名为5,4,6,2,3的...
用C语言解决一个实际问题(不要太长)
约瑟夫环(很有名的数学问题)已知n个人(以编号1,2,3...n分别表示)围坐在一张圆桌周围。从编号为k的人开始报数,数到m的那个人出列;他的下一个人又从1开始报数,数到m的那个人又出列;依此规律重复下去,直到圆桌周围的人全部出列。void JOSEPHUS(int n,int k,int m) //n为总人数,k...
求助, 约瑟夫环问题(C语言)
修改后的版本,解决初始m为1的情况。include<stdio.h> include<malloc.h> typedef struct node{ int num;int val;struct node* next;}listnode;//两个结构体可以合并以减少程序复杂度 typedef listnode* linklist;int main(){ int n,i,b,m,j;linklist q=(listnode*)malloc(sizeof(listnode))...
约瑟夫游戏问题
c[1]:=1; while cxiaoa do begin doubleb; incc; end; decc; fua; outit; end. 约瑟夫问题的另外一个有名的例子:猴子选大王 一. 问题描述: 一堆猴子都有编号,编号是1,2,3 ...m ,这群猴子(m个)按照1-m的顺序围坐一圈,从第1开始数,每数到第N个,该猴子就要离开此圈,这样依次...
数据结构中的约瑟夫环问题用C语言怎么编写出来啊?
1. 程序分析:这是一个比较经典的算法--约瑟夫环问题.2.个人分析: 算法比较经典,对于这样的问题本应该使用链表的形式会比较容易.约瑟夫环算法 则体现了使用数组来完成链表该完成的功能,虽然形式上完全不相同,但却求出了 相同的结果.有异曲同工之妙.总之我个人认为是数组中非常经典的算法了.希望本 ...
(C语言)用静态链表求解约瑟夫问题。
define MAX 100 typedef struct nodes { int data;nodes* next;}Lnode; /*静态链表节点结构体定义 */ // typedef struct list // { // Lnode node[MAX];// int head;// }List,*PList;void InitList(Lnode* pHead,int n)/*n为节点数 */ { pHead->data = 0;Lnode* pPre ...