C語言筆試題(13)——報數退出

     有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;
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章