C语言 指针 报数

题目描述:有n人围成一圈,顺序排号。从第1个人开始报数(从13报数),凡报到3的人退出圈子,问最后留下的是原来的第几号的那位。

####编程要求

输入

初始人数n

输出

最后一人的初始编号

####测试说明

样例输入:

3

样例输出:

2

#include 
#include

struct Person						//声明结构体
{                                  
    int num;
    struct Person *next;             //单向链表指向下一个元素
};

int main()
{
	int n;
	scanf("%d",&n);
    struct Person *per=calloc(n,sizeof(struct Person));
    int i;
    
    for (i=0; inext!=p; p=p->next)	//循环报号,当每次报到第2个人时,p的next指针直接跳过下一个变量,指向下下个变量
    //然后指针p再指向p的next指针所指向变量的地址(此时p的next指针就是之前p的下下个变量所在的地址),当指针p的next指针指向指针p自己时结束for循环。
	{    
        i++;
        if (i%2==0)
		{
            p->next=p->next->next;
            i=0;
        }
    }
    printf("%d\n", p->num);       //输出结果
    return 0;
}

你可能感兴趣的:(c语言,链表,算法)