设有n个人围坐一圈,现以某个人开始报数,数到m的人出列,接着从出列的下一个人开始重新报数,数到m的人又出列,如此下去,直到所有人都出列为止.按出列顺序输出.
这段代码是从网上找来的,在此特别说明!!!!!
#include "stdlib.h"
struct ele {
int no;
struct ele *link;
} main() {
struct ele *h, *u, *p;
int n, m, i;
printf("Please input n&m:\n");
scanf("%d%d", &n, &m);/*输入n和m*/
h = u = (struct ele *) malloc(sizeof(struct ele));/*形成首表元*/
h->no = 1;
for (i = 2; i <= n; i++)/*形成其余的n-1个表元*/
{
u->link = (struct ele *) malloc(sizeof(struct ele));
u = u->link;
u->no = i;/*第i个表元置编号i*/
}
u->link = h;/*末表元后继首表元,形成环*/
puts(
"\nThe numbers of who will quit the cycle in turn are:");
while (n) {
for (i = 1; i < m; i++)
/*掠过m-1个表元*/
u = u->link;
p = u->link;/*p指向第m个表元*/
u->link = p->link;/*第m个表元从环中脱钩*/
printf("%4d", p->no);
free(p);/*释放第m个表元占用的空间*/
n--;
}
printf("\n\n Press any key to quit...\n");
getchar();
}
当碰到问题,首先考虑这个问题是怎样的类型,第二从解决列表中选择中最合适的方案.以这个问题为例:问题中是一个循环性质,关键点“有n个人围坐一圈”。可选数据结构与算法中的可选方案:队列,栈,线性表,串。队列,栈和串都不大合适。以线性表中的单向循环链表最合适。
回想当时面试时,我使用的是数据组,面试者问我,为什么不使用链表?数组是可以解决问题,但相对麻烦些。思考一下,面试时,要多才考虑一下,这个考题背后的东西,最近一段在看《编程之美》,里面的思路很好,如果能达到书上描述的那样,碰到问题都抽丝剥茧,把能把复杂问题抽象化,简单化,那么编程的水平就能更上一层楼了。
在下一篇中,我将写一下《编程之美》中关于数组右转的问题。
分享到:
相关推荐
一开始任选一个正整数作为报数上限值m,从第一个仍开始顺时针方向自1开始顺序报数,报到m时停止报数。报m的人出列,将他的密码作为新的m值,从他在顺时针方向的下一个人开始重新从1报数,如此下去,直到所有人全部...
单向循环链表实现约瑟夫环.zip
用单向循环链表解决约瑟夫问题。使用c++语言,结构体,链表的操作。
循环链表 实现约瑟夫环 java 自己写的 测试通过 有注释
用C语言编写的约瑟夫环问题解决程序,利用单向循环链表存储结构模拟此过程
VC++采用单向循环链表实现约瑟夫环,希望和大家共勉。
用单向循环链表解决约瑟夫问题的算法优劣性分析.doc
利用单向循环链表存储结构模拟此过程,按照出列的顺序印出各人的编号。 测试数据 M的初值为20;n=7,7各人的密码依次为3,1,7,2,4,8,4,首先m值为6(正确出栈顺序为6,1,4,7,2,3,5)
基于单向循环链表的约瑟夫环设计.doc
约瑟夫环问题: 编号为1,2,3 n的n个人按顺时针方向围坐一圈,没人持有一个密码。一开始任选一个正整数作为报数上限值m,从第一人开始按顺时针方向报数,报到m停止。报m的人出列,将他的密码作为新的m的值,从他的...
本程序是采用带头结点的单向循环链表写成的,当指针指到要出列的结点时,先输出结点的序列号,再删除之,直到所有结点都出列完
不再采用单向循环链表解决约瑟夫问题,而是双向循环链表解决约瑟夫,并采用一些技巧来解释使用说明,即教程,并且密码可以为正整数,也可以为负数
单向循环链表 约瑟夫 c++ 利用单向循环链表存储结构模拟约瑟夫问题,按照出列的顺序印出每个人的编号。
上机测试过的源代码,可以在VC6.0和VS直接运行,完全符合老师要求,大家不妨来转转
数据结构问题,编程实现约瑟夫环,原题是严淑敏的《数据结构C语言版题集》实习一的第二题
单向循环链表实现约瑟夫环,单向循环链表实现约瑟夫环单向循环链表实现约瑟夫环
类似约瑟夫环问题。有一群人组成一个圈。从头开始按照顺时针方向从1开始依次报数。报到到9的人就离开圈子。其左手边的人接着从1开始报数。依此进行,直到剩最后一个人为止。
本程序主要是以建立单循环链表的形式,利用单向循环链表存储结构模拟此过程,建立起一个约瑟夫环,然后根据之前创立的结点,输入结点里的一些数据,程序有主函数开始,首先,提示输入创建约瑟夫环环数以及每个环上所...
用单向循环链表来实现约瑟夫环问题.自己做的数据结构课设,供大家参考!
基本要求:利用单向循环链表模拟此过程,按照出列的顺序印出各人的编号。 测试数据:m的初值为20;n=7,7个人的密码依次为:3,1,7,2,4,8,4,首先m值为6(正确的出列顺序应为6,1,4,7,2,3,5)。 实现...