13個人圍成一圈,從第1個人開始順序報號1,2,3。凡報到3者退出圈子。找出最后留在圈子中的人原來的序號。要求用鏈表實現


13個人圍成一圈,從第1個人開始順序報號1,2,3。凡報到3者退出圈子。找出最后留在圈子中的人原來的序號。要求用鏈表實現。

點我看視頻講解+可運行代碼,記得收藏視頻,一鍵三連
解題思路:

創建一個環形鏈表,給鏈表中的每一個節點從1~13編號,然后開始淘汰過程,對於淘汰的節點,序號置為0,淘汰完成之后,找到序號不為0的即為最后留下的。

#include <stdio.h>
#define NUM 13
typedef struct people
{
	int num;
	struct people *next;
} people;

int main()
{
	int count = NUM;
	people p[NUM];
	people *head;
	head = p; //head 指向p[0]
    //1~13編號
	for (int i = 0; i < NUM; i++)
	{
		head->num = i + 1;
		head->next = &p[i + 1];
		head = head->next;
	}
    //最后一個元素指向第一個元素 , 形成環
	p[NUM - 1].next = p; 

	int i = 1;
	head = p;
	while (count > 1)
	{
        //跳過已經被淘汰的節點
		if (head->num == 0)
		{
			head = head->next;
			continue;
		}
		if (i == 3)
		{
            //被淘汰的節點,num置為0
			printf("第 %d 位置被淘汰\n", head->num);
			head->num = 0;
			count--;
		}
		head = head->next;
		i++;
		if (i > 3)
		{
			i = 1;
		}
	}
	printf("--------------\n");
	while (head->num == 0)
	{
        //非0節點即為最后留下的
		head = head->next;
		if (head->num != 0)
		{
			printf("留到最后的是 %d \n", head->num);
		}
	}

	return 0;
}

運行截圖:

13個人圍成一圈,從第1個人開始順序報號1,2,3。凡報到3者退出圈子。找出最后留在圈子中的人原來的序號。要求用鏈表實現


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



猜您在找 有n個人圍成一圈,順序排號。從第1個人開始報數(從1到3報數),凡報到3的人退出圈子,問最后留下的是原來第幾號的那位 有n個人圍成一圈,順序排號。從第一個人開始報數(從1到3報數),凡報到3的人退出圈子,問最后留下的是原來第幾號的那位。 【轉】約瑟夫環算法---------題目:有n個人圍成一圈,順序排號,從第一個開始報數(從1到3報數),凡報到3的人退出圈子,問最后最后留下的是原來第幾號的那位. 約瑟夫環問題:有n個人圍成一圈,順序排號。從第一個人開始報數(從1到3報數),凡報到3的人退出圈子,問最后留下的是原來第幾號的那位。 5、題目:有n個人圍成一圈,順序排號。從第一個人開始報數(從1到3報數),凡報到3的人退出圈子,問最后留下的是原來第幾號的那位。 思路:n長度的數組,boolean類型。出圈置為false,當最后只有一個true的時候,就是留下來的人。 有17個人圍成一圈,從0號的人開始報數,凡報到3的倍數的人離開圈子,然后再數下去。直到最后只剩下一個人為止。問此人原來的位置是多少號。 n人圍成一圈報數 面試題-python3 100個人圍一圈編號1-100,依次開始報數報到3的退出 一群猴子排成一圈,按1,2,...,n依次編號。然后從第1只開始數,數到第m只,把它踢出圈,從它后面再開始數,再數到第m只,在把它踢出去...,如此不停的進行下去,直到最后只剩下一只猴子為止,那只猴子就叫做大王。要求編程模擬此過程,輸入m、n, 輸出最后那個大王的編號
 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM