N個人圍成一圈報數

1. 有N個人圍成一圈,順序排號,從第一個人開始報數,凡是報到M的人退出圈子,問最后留下的幾號?

#define N 15
int main(int argc, char const *argv[])
{
    int M;
    scanf("%d",&M);

    int people[N]={0};
    int people_remain = N;
    int people_out = 0;
    int people_count = 1;
    int i = 0;
    while(people_remain!=1){
        if (0 == people[i]){
            if(M == people_count){
                people[i] = 1;
                --people_remain;
                ++people_out;
                people_count=1;
            }
            else
                ++people_count;
        }
        i=(i+1)%N;
    }
    for (int i = 0; i < N; ++i)
    {
        if (people[i] == 0)
            printf("%d\n",i+1);
    }
    return 0;
}

2. N個人圍成一圈,從第S個人開始順時針1,2,3,4,...M的順序報數,數到M的人出圈,然后從出圈的下一個人開始重復此過程,輸出所有出圈的人的順序。

int main(int argc, char const *argv[])
{
    int M,S,N;
    printf("please input people number\n");
    scanf("%d",&N);//總人數

    printf("please input counting cycle\n");
    scanf("%d",&M);//報數循環

    printf("please input counting start people\n");
    scanf("%d",&S);//從第幾個人開始

    int *people =(int *)calloc(N,sizeof(int));
    int people_remain = N;
    int people_out = 0;
    int people_count = 1;
    int i = S-1;

    printf("出圈人的順序為:");
    while(people_remain!=1)
    {
        if (0 == people[i])
        {
            if(M == people_count)
            {
                printf("%d,",i+1);
                people[i] = 1;
                --people_remain;
                ++people_out;
                people_count=1;
            }
            else
                ++people_count;
        }
        i=(i+1)%N;
    }
    printf("\n");
    for (int i = 0; i < N; ++i)
    {
        if (people[i] == 0)
            printf("%d\n",i+1);
    }
    return 0;
}

** N個人圍成一圈,從第1個人開始順時針1,2,3,4,...M的順序報數,數到M的人出圈,然后從出圈的下一個人開始重復此過程,直到圈中所剩的人數為M-1個人。輸出所有出圈的人的順序,并輸出剩余的人的編號**

int main(int argc, char const *argv[])
{
    int M,N;
    printf("please input people number\n");
    scanf("%d",&N);

    printf("please input counting cycle\n");
    scanf("%d",&M);

    int *people =(int *)calloc(N,sizeof(int));
    int people_remain = N;
    int people_count = 1;
    int i = 0;
    printf("出圈人的順序為:");
    while(people_remain!=M-1)
    {
        if (0 == people[i])
        {
            if(M == people_count)
            {
                printf("%d,",i+1);
                people[i] = 1;
                --people_remain;
                people_count=1;
            }
            else
                ++people_count;
        }
        i=(i+1)%N;
    }
    printf("\n");

    printf("剩下的人的編號為:");
    for (int i = 0; i < N; ++i)
    {
        if (people[i] == 0)
            printf("%d,",i+1);
    }
    printf("\n");
    return 0;
}
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 【程序1】 題目:古典問題:有一對兔子,從出生后第3個月起每個月都生一對兔子,小兔子長到第三個月后每個月又生一對兔...
    葉總韓閱讀 5,165評論 0 41
  • Java經典問題算法大全 /*【程序1】 題目:古典問題:有一對兔子,從出生后第3個月起每個月都生一對兔子,小兔子...
    趙宇_阿特奇閱讀 1,910評論 0 2
  • 很多人一提到相親大都一臉嫌棄。但是,我們真的厭惡相親嗎?事實上,我們厭惡的從來不是相親本身,而是目前物化的相親形式...
    塵埃里的圓點閱讀 266評論 0 0
  • “相信我?” “你相信一個婊子?” “解釋什么,你說的沒錯,我就是個婊子…” 路過一個小胡同的時候,看到路邊一個騎...
    寧桐ningtong閱讀 663評論 7 10
  • 梅紅幺幺,帶著我們幾個孩子,去了九佛崗街上的一家照相館,工作人員問我臉上的胎記要不要化妝一下,后來給我涂了一層厚厚...
    藤木同學閱讀 250評論 0 0