有n個人圍成一圈,順序排號。從第一個人開始報數(從1到3報數),凡報到3的人退出圈子,問最後留下的是原來第幾號的那位?
分析:可以構造一個數組進行操作,聲明一個變量來計數,將報到3的置0, 然後最後將數組中不爲0的元素輸出即爲剩下的;
#include <stdio.h>
#include <stdlib.h>
int main(int argc, const char *argv[])
{
int i, n, m, k, num[100];
int *p = NULL;
printf("input the num: ");
scanf("%d", &n);
p = num;
k = 0; //用於計數
m = 0; //統計退出的人數
//給每個人編號
for (i = 0; i < n; i++)
*(p + i) = i + 1;
i = 0;
while (m < n - 1) //未退出的人數大於1時執行循環體
{
if (*(p + i) != 0) //不爲0的就可以進行報數
k++;
if (k == 3) //報數爲3的置0
{
*(p + i) = 0;
k = 0;
m++;
}
i++;
if (i == n)
i = 0;
}
for (i = 0; i < n; i++) //篩選出不爲0的元素
{
if (*(p + i) != 0)
break;
}
printf("left is %d\n", *(p + i));
return 0;
}