有n個人圍成一圈,順序排號。從第1個人開始報數(從1到3報數),凡報到3的人退出圈子,問最后留下的是原來第幾號的那位


有n個人圍成一圈,順序排號。從第1個人開始報數(從1到3報數),凡報到3的人退出圈子,問最后留下的是原來第幾號的那位。

點我看視頻講解+可運行代碼,記得收藏視頻,一鍵三連
解題思路: 從第一個人開始,逐個報數,誰報3就退出,並且重置報數,直到最后一個人后,又重新從第一個人繼續報數,直到最終只剩一個人的時候退出即可。

答案:

#include <stdio.h>
int main()
{
	int people[128], n;
	printf("Please input how many people: ");
	scanf_s("%d", &n);
	for (int i = 0; i < n; i++) {
		people[i] = i + 1; //對每個人順序排號
	}
	int remain = n;
	int num_off = 0;
	int *p = NULL;
	while (remain > 1) {
		p = people;
		while (p != people + n) { // 每次從第一個位置開始,直到最后一個位置,報數是一直遞增的
			if ((*p) != 0) {//若這個位置人還在
				num_off++; //則報數
				if (num_off == 3) {//否則當前的人即將要報的數字是3
					*p = 0;  //則剔除這個人
					num_off = 0; //並且重新開始計數,下邊會++,所以是從1開始報數
					remain--;//剩余人數-1
				}
			}
			p++;
		}
	}
	for (int i = 0; i < n; i++) {
		if (people[i] != 0) {
			printf("Serial number of the remaining person:%d\n", people[i]);
		}
	}

	printf("\n");
	system("pause");
	return 0;
}

有n個人圍成一圈,順序排號。從第1個人開始報數(從1到3報數),凡報到3的人退出圈子,問最后留下的是原來第幾號的那位


免責聲明!

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



猜您在找 有n人圍成一圈,順序排號。從第1個人開始報數(從1到3報數),凡報到3的人退出圈子,問最后留下的是原來的第幾號的那位。 有n個人圍成一圈,順序排號。從第1個人開始報數(從1到3報數),凡報到3的人退出圈子,問最后留下的是原來第幾號的那位 有n個人圍成一圈,順序排號。從第一個人開始報數(從1到3報數),凡報到3的人退出圈子,問最后留下的是原來第幾號的那位。 python 實現:題目:有n個人圍成一圈,順序排號。從第一個人開始報數(從1到3報數),凡報到3的人退出圈子,問最后留下的是原來第幾號的那位 JAVA編程---------37、n個人圍成一圈,順序排號。從第一個人開始報數(從1到3報數),凡是報到3的人退出圈子,問最后留下的是原來第幾號的那位。 Python初學者練習:有n個人圍成一個圈,順序排號。從第一個人開始報數(從1到3報數),凡報到3的人退出圈子,問最后留下的是原來第幾號的那位 13個人圍成一圈,從第1個人開始順序報號1,2,3。凡報到3者退出圈子。找出最后留在圈子中的人原來的序號。要求用鏈表實現 C語言 約瑟夫圈問題:N個人圍成一圈,從第一個人開始按順序報數並編號1,2,3,……N,然后開始從第一個人轉圈報數,凡是報到3的退出圈子。則剩下的最后一個人編號是多少。 C# 有N個人圍成一圈,第一個人從1開始報數,報到M的人出列,求依次出列的人的編號 約瑟夫環問題(100圍坐一圈報數,報3出圈)
 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM