提问:链表应用的一个程序:围圈报数

ScorpioZZR 2003-08-19 10:59:08
某书上摘抄的程序:
13个人围成一圈,从第一个人开始顺序报号1、2、3。凡报到“3”者退出圈子。找出最后留在圈子中的人的原来的序号。

若程序执行正常,应有如下显示。
-----------------------------
sequence that persons leave the circle:
3 6 9 12 2 7 11 4 10 5 1 8
The last one is 13.
-----------------------------

不知道哪里错了?程序运行时就死循环了好像。。。

<程序源码>
-----------
#include <stdio.h>
#define N 13
struct person
{
int number;
int nextp;
}link[N+1];

void main()
{
int i,count,h;
for(i=1;i<N;i++)
{
if(i==N)
link[i].nextp=1;
else
link[i].nextp=i+1;
link[i].number=i;
}
printf("\n");
count=0;
h=N;
printf("sequence that persons leave the circle:\n");
while(count<N-1)
{
i=0;
while(i!=3)
{
h=link[h].nextp;
if(link[h].number)
i++;
}
printf("%4d",link[h].number );
link[h].number=0;
count++;
}
printf("\nThe last one is");
for(i=1;i<=N;i++)
if(link[i].number )
printf("%3d",link[i].number );
}
...全文
188 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
robin97 2003-08-19
  • 打赏
  • 举报
回复
《具体数学》有极其详细的讲解,根本不用循环处理,直接用公式算
好像是:R0 = 1
Rn = m/(m-1)R(n-1) n是下标
不太记得了
ZhangYv 2003-08-19
  • 打赏
  • 举报
回复
/*约瑟夫问题(猴子选大王): n只猴子要选大王,选举办法如下:所有猴子按1,2,…,n编号围坐一圈,从第一号开始按1,2,…,m报数,凡报m号的推出圈外,如此循环报数,直到圈内剩下一只猴子时,这只猴子就是大王.n和m由键盘输入,打印出最后剩下的猴子号.*/
#include <stdio.h>
#include <malloc.h>
struct Link{
int id;
Link *next;
};
void Initialize(int n, Link *head)
{
int i;
Link *p;
for (i = 1, p = head; i <= n; i++){
p->next = (Link *) malloc (sizeof(Link));
p = p->next;
p->id = i;
}
p->next = head->next;
}

void Delete(Link *node)
{
Link *temp;
temp = node->next;
printf("%d ", node->next->id);
node->next = temp->next;
free(temp);
}
void main()
{
Link *head, *p;
int n, i, k;
printf("%s","Input n,k = ");
scanf("%d%d", &n, &k);
head = (Link *) malloc (sizeof(Link));
head->next = (Link *) malloc (sizeof(Link));
Initialize(n, head);
for (p = head, i = 1; p != p->next; p = p->next, i++){
if (i == k){
i = 1;
Delete(p);
}
}
printf("\n");
printf("%d", p->id);
}
http://expert.csdn.net/Expert/topic/2059/2059607.xml?temp=.9749262
在这里,仔细找找.
紫郢剑侠 2003-08-19
  • 打赏
  • 举报
回复
约瑟夫问题?
以前我做时就是用最直接的办法,一个一个数.
后来才知道可以用取模的方法...

69,336

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧