C語言復習---找出報數最后一人


題意:

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

算法實現:

(一)一種是按照鏈表數據結構(一)線性表循環鏈表之約瑟夫環

(二)使用數組實現

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int getLast(int *p, int n)
{
    int count = 0,index=0;
    int i = 0, k = 0;
    while (count<n-1)  //一次處理一個步長,只包含if判斷,會簡單點 { if (p[i++]) k++; if (k == 3) { p[i - 1] = 0; count++; k = 0; } if (i == n) i = 0; } for (i = 0; i < n; i++)
        if (p[i])
            return p[i];
}

int main()
{
    int n,i;
    int* p;
    printf("input number of person:");
    scanf("%d", &n);
    p = (int*)malloc(n*sizeof(int));

    for (i = 0; i < n; i++)
        p[i] = i + 1;

    i = getLast(p, n);

    printf("%d\n", i);

    system("pause");
    return 0;
}

 


免責聲明!

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



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM