C语言程序设计,数数跳河问题,30个人,从1到9数数,数到9的就跳河!30个人围坐一圈,顺序编号为1,2,3,…,30.现在从第一个人开始数起,每数到9时,这个人就从圈里出来,再从下一个数重新开始数1,2,…,9

来源:学生作业帮助网 编辑:作业帮 时间:2024/04/29 17:00:44
C语言程序设计,数数跳河问题,30个人,从1到9数数,数到9的就跳河!30个人围坐一圈,顺序编号为1,2,3,…,30.现在从第一个人开始数起,每数到9时,这个人就从圈里出来,再从下一个数重新开始数1,2,…,9

C语言程序设计,数数跳河问题,30个人,从1到9数数,数到9的就跳河!30个人围坐一圈,顺序编号为1,2,3,…,30.现在从第一个人开始数起,每数到9时,这个人就从圈里出来,再从下一个数重新开始数1,2,…,9
C语言程序设计,数数跳河问题,30个人,从1到9数数,数到9的就跳河!
30个人围坐一圈,顺序编号为1,2,3,…,30.现在从第一个人开始数起,每数到9时,这个人就从圈里出来,再从下一个数重新开始数1,2,…,9,数到第9的这个人也从圈里出来,直到有15个人从圈里出来为止.例如,前面站出来的4个人是9,18,27.编程输出从圈里出来的人的顺序.

C语言程序设计,数数跳河问题,30个人,从1到9数数,数到9的就跳河!30个人围坐一圈,顺序编号为1,2,3,…,30.现在从第一个人开始数起,每数到9时,这个人就从圈里出来,再从下一个数重新开始数1,2,…,9
用循环单链表解决直接明了
#include
typedef struct LNode
{
int number;
struct LNode *next;
}LinkList;
void main()
{
int i,outp;
LinkList *head = (LinkList *)malloc(sizeof(LinkList));
LinkList *p = head;
head->number = 1;//第一个人编号为1
head->next = head;
for (i = 2; i number = i;
p->next = q;
p = q;
if (i == 30)
{
q->next = head;
}
}
p = head;
i = 1;
outp = 0;//计出圈人数
while (outp != 15)
{
p = p->next;
i++;
if (i == 8)
{//下一个人跳出
printf("%3d",p->next->number);
p->next = p->next->next;
p = p->next;
i = 1;
outp++;
}
}
}
运行结果:
9 18 27 6 16 26 7 19 30 12 24 8 5 23