首页 > 试题广场 >

13个人围成一圈,从第1个人开始顺序报号1,2,3。凡报到3

[问答题]

13个人围成一圈,从第1个人开始顺序报号123。凡报到3者退出圈子。找出最

后留在圈子中的人原来的序号。要求用链表实现。

推荐

#include<stdio.h>

#define N 13


struct person

{int number;

int nextp;

}link[N+1];


int main()

{int i,count,h;

for(i=1;i<=N;i++)

{if(i==N)

link[i].nextp=1;

else

link[i]nextp=i+1;

link[i].rumber=i;

}

printf("\n”);

count=0;

h=N;

printf("sequence that persons leave the circle:\n");

while(count<N-1)

{i=0;

while(i!=3)

{h=link[h].nextp;

if(link[h].number)

i++;

}

printf("%4 d",link[h].number);

link[h].number=0;

count++;

}

printf("\nThe last one is");

for(i=1;i<=N;i++)

if(link[i].number)

printf("%3d",link[i].number);

printf("\n”);

return 0;

}


发表于 2018-03-25 10:34:39 回复(0)
#include <stdio.h>
#include <stdlib.h>
typedef struct Node 
{
    int num;
    struct Node* next;
} Node;
Node* createCircle(int n) 
{
    Node* head = (Node*)malloc(sizeof(Node));
    head->num = 1;
    Node* prev = head;
    for (int i = 2; i <= n; i++) {
        Node* node = (Node*)malloc(sizeof(Node));
        node->num = i;
        prev->next = node;
        prev = node;
    }
    prev->next = head;
    return head;
}
int findLastPerson(Node* head)
{
    Node* current = head;
    Node* prev = NULL;
    while (current->next != current)
    {
        for (int i = 1; i < 3; i++) 
        {
            prev = current;
            current = current->next;
        }
        prev->next = current->next;
        free(current);
        current = prev->next;
    }
    int lastPerson = current->num;
    free(current);
    return lastPerson;
}

int main() 
{
    Node* circle = createCircle(13);
    int lastPerson = findLastPerson(circle);
    printf("The last person left is number %d.\n", lastPerson);
    return 0;
}
发表于 2025-01-04 09:45:31 回复(0)