欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

13个人围成一圈,从第1个人开始顺序报号1,2,3.凡报到3者退出圈子。找出最后留在圈子中的人原来的序号。要求用链表实现。

程序员文章站 2022-05-28 21:49:35
...

13个人围成一圈,从第1个人开始顺序报号1,2,3.凡报到3者退出圈子。找出最后留在圈子中的人原来的序号。要求用链表实现。

 

13个人围成一圈,从第1个人开始顺序报号1,2,3.凡报到3者退出圈子。找出最后留在圈子中的人原来的序号。要求用链表实现。

#include <stdio.h>
#include <stdlib.h>

struct Person{                                   //定义结构体
    int num;
    struct Person *next;
};
int main()
{
    struct Person per[13];                              //定义结构体变量数组
    int i;
    for (i=0; i<13; i++){                        //此循环给13个人标注序号,1对应第一个人,以此类推,同时实现循环链表,当到达链表最后一个时,地址指向开头。
        per[i].num=i+1;
        if (i==12) per[i].next=&per[0];
        else per[i].next=&per[i+1];
    }
    struct Person *p,*p1;
    for (p=per, i=1; p->next!=p; p=p->next){    //循环报号,当每次报到第3个人时,next指针直接跳过下一个变量,指向下下个变量,当next指针指向自己时结束循环。
        i++;
        if (i==3){
            p1=p->next;
            printf("%d ", p1->num);
            p->next=p->next->next;
            i=1;

        }
    }
    printf("\nThe number is %d\n", p->num);       //输出结果
    system("pause");
    return 0;
}

 

 

相关标签: c