博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
约瑟夫问题解决
阅读量:5333 次
发布时间:2019-06-15

本文共 899 字,大约阅读时间需要 2 分钟。

问题叙述性说明:有着N人身。离1至N号码,通过环形包围,从第一人1报数,每一个第一M百姓出,人休息继续报告的数量,等等,寻找这个人的最后剩余数量。

上次去的地方写的网络,在测试这个问题,说话的12人身。一圈圈,从第一人报数,1-3,每个报告3人出局,求最后剩下那个人原来的序号。

能够用一个循环链表来解决。将全部人的编号构成一个循环链表。每隔M就删掉一个节点,直到最后剩下一个。

void josephus (int N, int M){	//定义一个节点,当然定义在这里不怎么合适	struct node {		int item;		struct node *next;	}Node;	//创建第一个节点	Node *t = malloc (sizeof (Node));	Node *x = t;	t -> item = 1;	t -> next = t;	//创建剩下的节点	for (int i = 2; i <= N; i++)	{		Node *new = malloc (sizeof (Node));		x -> next = new;		x = x -> next;		x -> item = i;		x -> next = t;	}	//循环数数,每隔M的人出局	while (x != x -> next)  //不是最后一个节点	{		for (int i = 1; i < M; i++)			x = x -> next;		//第M个人出局                Node *del = x -> next;                x -> next = x -> next -> next;                free(del);                N--;	}	//打印最后一个节点	printf ("%d", x -> item);        free(x); }

版权声明:本文博主原创文章,博客,未经同意不得转载。

转载于:https://www.cnblogs.com/zfyouxi/p/4874356.html

你可能感兴趣的文章
linux邮件系统的优势和便利性
查看>>
专题——基础递推
查看>>
ubuntu 下安装redis
查看>>
【剑指offer 面试题7】用两个栈实现队列
查看>>
docker 容器管理常用命令
查看>>
Filter plugins ? mutate:
查看>>
SQL优化指南
查看>>
Archive for required library xx cannot be read or is not a valid ZIP file
查看>>
反射方法调用时:参数计数不匹配( parameter count mismatch )
查看>>
ThoughtWorks技术校园行第二波 课程资料 CleanCode&DirtyCode
查看>>
写一个python的服务监控程序
查看>>
浅谈构建软件測试自己主动化測试
查看>>
SQL表关联赋值、系统表、表数据删除
查看>>
转:重温SQL——行转列,列转行
查看>>
java文件与流课后作业
查看>>
java基础(七)面向对象(二)
查看>>
用DOS命令配置服务开机自启动
查看>>
cookie解析
查看>>
阿里 RPC 框架 DUBBO 初体验
查看>>
node中 path.join 和 path.resovle 区别
查看>>