注册 登录
编程论坛 新人交流区

一道有趣的编程题,大家都来做一做撒

blosaa 发布于 2007-10-21 20:42, 292 次点击
一道有趣的编程题,大家都来做一做撒

将班里的 n 个人围成一圈,顺序编号。从第一个人开始报数(从 1 到 3 报数),凡报到3的人退出圈子,然后从下一个人重新开始,最后留下的那个人就被选为班长。请问按照这个规则,选出的班长是原来编号为第几号的那位.
9 回复
#2
酒浪子2007-10-21 21:42
哪个高人能解答一下
#3
IvyMeng2007-10-21 21:45

自己多想想,就会写出来的。

#4
一把枪2007-10-21 21:48

用链表解决!

#include<stdio.h>
#include<malloc.h>
#define LEN sizeof(struct person)
struct person
{
int num;
struct person *next;
}

main()
{
struct person *head,*p1,*p2;
int i;
head=p1=p2=(struct student *) malloc(LEN);
head->num=1;
for(i=0;i<99;i++)
{
p1=(struct student *) malloc(LEN);
p1->num=i+2;
p2->next=p1;
p2=p1;
}
p1->next=head->next;
head=p2=p1->next;
for(i=0;i<97;i++)
{
p2->next->next=p2->next->next->next;
p2=p2->next->next;
}
printf("%d",p2->next->num);
}

#5
tcxiang2007-10-21 23:04

要么用类似于循环队列的动态分配的顺序表吧..

#6
nihaozhuo1202007-10-22 12:41
我算不出来 那位高手告告呀
#7
a553824102007-10-22 13:00

我也算不出来

#8
xiaojiaqiao2007-10-22 13:01
不會啊....
#9
jinghua2007-10-22 14:40
#10
zhangyg_cn2007-10-22 14:54
有点晕

人数不确定呀!
1