已知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;
}
你可以使用这个链接引用该篇文章 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
|
|||
看不懂!!! |
||||