有30个人围成一圈,顺序排号。从第一个开始报数(从1~4报数),凡是报到4的…
因为是1234循环报数,一共有30个人,有30÷4=7组余2个。所以报1的同学有7+1=8个,报3的有7个。
设有n个人(编号0~(n-1)),从0开始报数,报到(m-1)的退出,剩下的人继续从0开始报数 (用数学方法解的时候需要注意应当从0开始编号,因为取余会取到0解。
把1到M的数是7的倍数的写0,最后数到几了记下来(设为N)。把非零的数记录到一个新的数组(两个数组就够够用了),下一次从N开始计数,到7的还是记为0。重复上述步骤,直到还剩下一个数。
每次不止退出一个人。因为是报到3的就退出。但是您只执行了n– 应该是n-=(n+1)/3。或者是n=j。这样的话才是正确的。
c语言编程(约瑟夫问题)
约瑟夫问题:Joseph问题的一种描述是:编号为……、n的n个人按顺时针方向围坐一圈,每人持有一个密码(正整数)。
原题:n个乘客同乘一艘船,因为严重超载,加上风高浪大,危险万分,因此船长告诉乘客,只有将部分乘客投入海中,其余人才能幸免于难。
已经修改好了。上次调试程序调试的不仔细,这次应该没问题了,如果有的话再跟我联系。
然后再由下一个重新报数,直到所有人都自杀身亡为止。然而Josephus和他的朋友并不想遵从,Josephus要他的朋友先假装遵从,他将朋友与自己安排 在第16个与第31个位置,于是逃过了这场死亡游戏。
前阵子做的用单向链表实现约瑟夫问题:有M个人围一圈玩报数,凡报到N的出退出,输出每次退出的人的编号。
约瑟夫问题c语言
约瑟夫问题:Joseph问题的一种描述是:编号为……、n的n个人按顺时针方向围坐一圈,每人持有一个密码(正整数)。
他们都是用链表做的。我没用链表做。。很简单的写了一个。。
然后再由下一个重新报数,直到所有人都自杀身亡为止。然而Josephus和他的朋友并不想遵从,Josephus要他的朋友先假装遵从,他将朋友与自己安排 在第16个与第31个位置,于是逃过了这场死亡游戏。
约瑟夫环问题的一种描述是:编号为3…….n的n个人按顺时针方向围坐一圈,每人手持一个密码(正整数),开始任意选一个整数作为报数上限值,从第一个人开始顺时针自1开始顺序报数,报到m时停止报数。
你在往创建链表函数传递参数时写的是结点指针的引用。而你main函数里体用该函数时写的是结点的引用。
用数据结构的单循环链表写的约瑟夫环(C语言),哪错了?
建议:首先你要有一个思路,想象一下,n个人手拉(链)手,从编号为1的人开始报数,执行约瑟夫循环过程。用两个函数完成,Create_CL(LinkList &L,int n)完成环(循环链表)的创建,第二个是约瑟夫循环过程(包括输出)。
怎么可能就好了,不敢细看,为何不把调用的写在上面?函数调用参数就有错误,CreateList(&L),L在main函数中是一个指针,接收的就应该是二级指针,而你用地址接收了。把所有程序写在main函数中估计都比现在短。
这个就是约瑟夫环问题的实际场景,有一种是要通过输入n,m,k三个正整数,来求出列的序列。这个问题采用的是典型的循环链表的数据结构,就是将一个链表的尾元素指针指向队首元素。
type struct Node定义中的Node *next前面需要加上struct。