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


先寫我的思路,沒有用指針的做法。如果你用的是VC,把第六行去掉。

 

#include<stdio.h>
#include<stdlib.h>

int main()
{
    setvbuf(stdout,NULL,_IONBF,0);
    int n,num;             //n為總人數,num為剩余人數。
    int a[255]={0};        //用0標記此位置有人,若此位置的人退出,則該位置的值為1
    int i;
    int flag=0;            //flag為報數
 
    printf("How many people?");
    scanf("%d",&n);
    num=n;                //剩余人數初始為n
 
    while(num!=1)         //剩余人數為1時,停止循環
    {
        for(i=0;i<n;i++)
        {
            if(a[i]==0)    //若該位置有人,就報數
                flag++;
            if(flag==3)    //若報數為3,此人退出
            {
                flag=0;
                a[i]=1;
                num--;
            }
 
        }
    }
 
    for(i=0;i<n;i++)      //遍歷數組,第一個值為0的位置處就是剩余的人了
    {
        if(a[i]==0)
        {
            printf("The remaining person is NO.%d.",i+1);
            //數組的序號從0算起,而人的編號從1算起,所以有+1的修正
            break;
        }
    }
    return EXIT_SUCCESS;
}

 參考答案的算法基本和我的差不多

區別有:

1 每個位置上剛開始賦值為每個人的編號1-n,有人退出后,該人的位置賦值為0;

2 把每個用數組形式表示的a[i]轉換為*(p+i),p當然事先定義並賦值為p=a,不過這個區別不是很大哈。

最后一個循環可以用while來實現,很是簡潔:

  i=0;

  while(a[i]==1)

    i++;

  printf("The remaining person is NO.%d.",i+1);


免責聲明!

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



猜您在找 有n個人圍成一圈,順序排號。從第一個人開始報數(從1到3報數),凡報到3的人退出圈子,問最后留下的是原來第幾號的那位。 有n個人圍成一圈,順序排號。從第一個人開始報數(從1到3報數),凡報到3的人退出圈子,問最后留下的是原來第幾號的那位。 有n個人圍成一圈,順序排號。從第一個人開始報數(從1到3報數),凡報到3的人退出圈子,問最后留下的是原來第幾號的那位。 報數問題:有n個人圍成一圈,順序排號。從第一個人開始報數(從1到3報數),凡報到3的人退出圈子,問最后留下的是原來第幾號的那位 約瑟夫環問題:有n個人圍成一圈,順序排號。從第一個人開始報數(從1到3報數),凡報到3的人退出圈子,問最后留下的是原來第幾號的那位。 有10個人圍成一圈,順序排號。從第一個人開始報數(從1到3報數),凡報到3的人退出圈子,問最后留下的是第幾號的人 python 實現:題目:有n個人圍成一圈,順序排號。從第一個人開始報數(從1到3報數),凡報到3的人退出圈子,問最后留下的是原來第幾號的那位 有n個人圍成一圈,順序排號。從第1個人開始報數(從1到3報數),凡報到3的人退出圈子,問最后留下的是原來第幾號的那位 有n人圍成一圈,順序排號。從第1個人開始報數(從1到3報數),凡報到3的人退出圈子,問最后留下的是原來的第幾號的那位。 有n個人圍成一圈,順序排號。從第1個人開始報數(從1到3報數),凡報到3的人退出圈子,問最后留下的是原來第幾號的那位
 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM