順序迴圈報數到3,逐一退出,最後留下的是誰?

2021-09-19 10:58:26 字數 2213 閱讀 8558

題目:n人圍成乙個圈,順序排列。

從第乙個人開始報數,從一報到三,凡是報到三的人退出圈子,

問最後留下的是原來第幾號的那位。

<

// 20190421_circle_report_3_last_one_.c

/* 題目:n人圍成乙個圈,順序排列。

* 從第乙個人開始報數,從一報到三,凡是報到三的人退出圈子,

* 問最後留下的是原來第幾號的那位。

*/#include #include #include // 去除值為0的元素,重整陣列長度

int del_zero(int *p, int *source, int new_n, int *temp);

int main(int argc, char const *ar**)

if (n < 1)

int *p, *source;

source = (int *)malloc(n * sizeof(int));

if (source == null)

for (p = source; p < source + n; p++)

int new_n = n;

int *temp = (int *)malloc(n * sizeof(int));

if (temp == null)

int num = 1;

while (1)

} else if (new_n == 2) else

// 如果遍歷到了最後一位元素,則下一次從頭開始

if (p == source + new_n - 1) else

} if (new_n == 1)

} printf("the last number is %d\n", *source);

free(source);

source = null;

return 0;

}// 去除值為0的元素,重整陣列長度

int del_zero(int *p, int *source, int new_n, int *temp)

new_n = i;

int j;

for (j = 0, p = source; j < new_n; j++)

return new_n;

}

linux環境下,clang編譯,測試執行結果:

(1)

enter a num > 0 ==> people quantity: 0

number is too small. bye!

(2)

enter a num > 0 ==> people quantity: 1

the last number is 1

(3)

enter a num > 0 ==> people quantity: 2

the last number is 2

(4)

enter a num > 0 ==> people quantity: 3

the last number is 2

(5)

enter a num > 0 ==> people quantity: 4

the last number is 1

(6)

enter a num > 0 ==> people quantity: 5

the last number is 4

(7)

enter a num > 0 ==> people quantity: 6

the last number is 1

(8)

enter a num > 0 ==> people quantity: 7

the last number is 4

(9)

enter a num > 0 ==> people quantity: 11

the last number is 7

(10)

enter a num > 0 ==> people quantity: 16

the last number is 8

100人報數,數到3退出遊戲

有n個人圍成一圈,順序排號。從第乙個人開始報數 從1到3報數 凡報到3的人退出圈子,問最後留下的是原來第幾號的那位。這個題目比較經典,也被成為約瑟夫環問題,有興趣的朋友可以去搜搜約瑟夫環。做乙個簡單的示例,取10個人來報數,然後退出 從上面的示例,可以看出 定義初始陣列,陣列位置初始值為0 報數器只...

小孩報數(順序迴圈佇列版) (10 分

有若干個小孩圍成一圈,現從指定的第1個開始報數,報到第 w個時,該小孩出列,然後從下乙個小孩開始報數,仍是報到w個出列,如此重複下去,直到所有的小孩都出列 總人數不足w個時將迴圈報數 求小孩出列的順序。演算法要求 使用順序迴圈佇列來儲存所有小孩,報數時小孩出隊,未數到w時,接著入隊 數到w時,輸出小...

小孩報數(順序迴圈佇列版) (10 分

有若干個小孩圍成一圈,現從指定的第1個開始報數,報到第 w個時,該小孩出列,然後從下乙個小孩開始報數,仍是報到w個出列,如此重複下去,直到所有的小孩都出列 總人數不足w個時將迴圈報數 求小孩出列的順序。演算法要求 使用順序迴圈佇列來儲存所有小孩,報數時小孩出隊,未數到w時,接著入隊 數到w時,輸出小...