阶梯问题!- -| 回首页 | 2005年索引 | - -计算正整数NUM的各位上的数字之积!

关于约瑟夫问题!

                                      

已知24个人围坐在一张圆桌旁以1,2,3,......24对每个人依次编号,现在先从序号为1的人开始排数,数到3的那个人出列,他的下一个人又从1开始排数,报到3的人出列,直到所有的人都出列为止,编出程序求出出列顺序.


方法1:
main()
{
int a,b,s[25];
a=b=0;
for(i=1;i<=24;i++)
{
s[i]=i;
}
while (b<=24)
for (i=1;i<=24;i++)
a=a+s[i];
if(a%3==0)
{
printf("%d",i);
s[i]=0;
b++;
}
}

方法2
#include <stdio.h>
#include <stdlib.h>

typedef struct _link
{
 struct _link * next;
 int pos;
}link;

int main(int argc, char *argv[])
{
 link *front, *p, *last;
 p=front=(link *)malloc(sizeof(link));/*先分配一个*/
 p->pos=1;
 int n=5, i=0, num=3;
 for(i=2;i<=n;i++)/*再分配其它的,总共n个*/
 {
 p->next=(link *)malloc(sizeof(link));
 p=p->next;
 p->pos=i;
 }
 p->next=front;/*使之围成一个圈*/
 i=0;/*从头开始数*/
 last=p=front;/*从头开始数*/
 while(p->next!=p)/*当p->next==p时就只剩一个了*/
 {
 i++;/*数数*/
 if(i==3)/*数到3了,此人该下去*/
 {
 last->next=p->next;
 free(p);
 p=last;
 i=0;
 }
 last=p;//last的作用是保存前一个link,如果是双向链表,就不需要它了
 p=p->next;//到下一个人
 }
 printf("%d",p->pos);//最后剩下的一个人的位置
 system("PAUSE");
 return 0;
}

【作者: 刘加开】【访问统计:】【2005年03月16日 星期三 15:58】【 加入博采】【打印

Trackback

你可以使用这个链接引用该篇文章 http://publishblog.blogchina.com/blog/tb.b?diaryID=950919

回复

- 评论人:一   2005-11-12 20:18:53   

~!·#¥¥%……%……*%*(

- 评论人:仍然人   2005-11-12 20:18:47   

~!·#¥¥%……%……*%*(

- 评论人:7   2005-11-12 20:18:13   

7 彻底

- 评论人:7   2005-11-12 20:18:13   

7 彻底

- 评论人:7   2005-11-12 20:18:12   

7 彻底

- 评论人:7   2005-11-12 20:18:12   

7 彻底

- 评论人:7   2005-11-12 20:18:12   

7 彻底

- 评论人:7   2005-11-12 20:18:09   

7 彻底

- 评论人:7   2005-11-12 20:18:08   

7 彻底

- 评论人:7   2005-11-12 20:18:07   

7 彻底

- 评论人:7   2005-11-12 20:18:07   

7 彻底

- 评论人:7   2005-11-12 20:18:05   

7 彻底

- 评论人:7   2005-11-12 20:18:05   

7 彻底

- 评论人:7   2005-11-12 20:18:02   

7 彻底

- 评论人:天天   2005-11-12 20:17:42   

看不懂!!!

- 评论人:天天   2005-11-12 20:13:47   

???????????

- 评论人:天天   2005-11-12 20:12:54   

看不懂!!!

评论内容: