程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C >> C練習實例 >> C 練習實例69

C 練習實例69

編輯:C練習實例

C 練習實例69

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

程序分析:無。

程序源代碼:

//  Created by www.runoob.com on 15/11/9.
//  Copyright © 2015年 菜鳥教程. All rights reserved.
//

#include <stdio.h>
void main()
{
    int num[50],n,*p,j,loop,i,m,k;
    printf("請輸入這一圈人的數量:\n");
    scanf("%d",&n);
    p=num;
    //開始給這些人編號
    for (j=0;j<n;j++)
    {
        *(p+j)=j+1;
    }
    i=0;//i用於計數,即讓指針後移
    m=0;//m記錄退出圈子的人數
    k=0;//k報數1,2,3
    while(m<n-1)//當退出的人數不大於總人數時,即留下的人數至少是一個人
        //這句不能寫成m<n,因為假設有8人,當退出了6人時,此時還是進行人數退出,即m++,
        //這時是7<8,剩下的一個人自己喊1,2,3那麼他也就退出了,將不會有輸出
    {
        if (*(p+i)!=0)//如果這個人的頭上編號不是0就開始報數加1,這裡采用的方法是報數為3的人頭上編號重置為0
        {
            k++;
        }
        if (k==3)
        {    k=0;    //報數清零,即下一個人從1開始報數
            *(p+i)=0;//將報數為3的人編號重置為0
            m++;    //退出人數加1
        }
        i++;      //指針後移
        if (i==n)//這句很關鍵,如果到了隊尾,就要使指針重新指向對頭
            //並且它只能放在i++後面,因為只有i++了才有可能i==n
        {
            i=0;
        }
        
        
    }
    printf("現在剩下的人是:");
    for (loop=0;loop<n;loop++)
    {
        if (num[loop]!=0)
        {
            printf("%2d號\n",num[loop]);
        }
    }
    
}

以上程序執行輸出結果為:

請輸入這一圈人的數量:
8
現在剩下的人是: 7號

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved