C語言 約瑟夫圈問題:N個人圍成一圈,從第一個人開始按順序報數並編號1,2,3,……N,然后開始從第一個人轉圈報數,凡是報到3的退出圈子。則剩下的最后一個人編號是多少。


樣例輸入3  輸出2

輸入100   輸出91

代碼及分析:

#include<stdio.h>
int main()
{
  int i,n,N,out,a[1000];
  out=i=n=0;            //用out記錄退出圈子的人,初始化0;
  printf("輸入約瑟夫圈大小");
  scanf("%d",&N);
  for(i=0;i<N;i++)         //用N個數的數組保持N個人,並講該數組全部初始化1,用以記錄第N-1個人在圈外還是圈內(1則圈內,0則圈外);
  {
    a[i]=1;

  }
  i=0;
  while(out!=N-1)          //利用while循環找到剩下的人的編號;直到出圈的人=N-1時候停止;
  {
    if(a[i]==1)           //由於a[i]=1表示在圈內,則只要有a[i]==1,並令n++,記錄下他報的數;
    {  

      n++;

    }
    if(n==3)            //由於報到3即出圈,后繼續從1開始報;由於只要報到n=3,則該人即出圈,則用out++來記錄出圈的人數;並且將該人所在a[i]從1                      改為0,表示該人已經出圈,下一次循環時該人不參與報數;
    {
    a[i]=0;n=0;out++;
    }
    i++;
    if(i==N)             //由於N個人圍成了一個圈,則如果報到了第N個人,則下一個人為編號1,則賦值i=0;繼續下一次查找;
    {

      i=0;

    }
   }
  for(i=0;i<N;i++)           //由於出圈的人都已經被重新賦值0;則只要找到a[i]=1的人,則該人為剩下的人;  
  if(a[i]==1)
  {  

    printf("最后剩下的是第%d個人",i+1);break;

  }

return 0;
}


免責聲明!

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



猜您在找 有n個人圍成一圈,順序排號。從第一個人開始報數(從1到3報數),凡報到3的人退出圈子,問最后留下的是原來第幾號的那位。 JAVA編程---------37、n個人圍成一圈,順序排號。從第一個人開始報數(從1到3報數),凡是報到3的人退出圈子,問最后留下的是原來第幾號的那位。 python 實現:題目:有n個人圍成一圈,順序排號。從第一個人開始報數(從1到3報數),凡報到3的人退出圈子,問最后留下的是原來第幾號的那位 Python初學者練習:有n個人圍成一個圈,順序排號。從第一個人開始報數(從1到3報數),凡報到3的人退出圈子,問最后留下的是原來第幾號的那位 有n人圍成一圈,順序排號。從第1個人開始報數(從1到3報數),凡報到3的人退出圈子,問最后留下的是原來的第幾號的那位。 有n個人圍成一圈,順序排號。從第1個人開始報數(從1到3報數),凡報到3的人退出圈子,問最后留下的是原來第幾號的那位 有n個人圍成一圈,順序排號。從第1個人開始報數(從1到3報數),凡報到3的人退出圈子,問最后留下的是原來第幾號的那位 13個人圍成一圈,從第1個人開始順序報號1,2,3。凡報到3者退出圈子。找出最后留在圈子中的人原來的序號。要求用鏈表實現 C# 有N個人圍成一圈,第一個人從1開始報數,報到M的人出列,求依次出列的人的編號 約瑟夫環問題(100圍坐一圈報數,報3出圈)
 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM