當前位置:編程學習大全網 - 編程軟體 - c語言孫悟空約瑟夫斯

c語言孫悟空約瑟夫斯

今天,我意識到約瑟夫斯仍然有這麽好的算法。這是我看到的壹個解釋過程,只是解釋了M=3的情況,但是看完之後我恍然大悟。

壹圈有n個人,按順序編號。從第壹個人開始報數(從1到3)。誰報3就退圈,問最後壹個走的是原號。

輸入輸入壹個整數n (2

輸出輸出剩余人數。

樣本輸入4樣本輸出1

分析:

1)當有人外出時,可以用來給原號碼賦壹個新值。所以第二輪,1和2變成n+1,n+2,3出局,所以4和5分別變成n+4-1=n+3和n+5-1=n+4,6出局。。。,以此類推;

3k+1和3k+2分別變成n+3k+1-k=n+2k+1和n+3k+2-k=n+2k+2。

2)在上述編號方式下,第k個出的人的編號壹定是3k,所以最後壹個出的人的最終編號是3n。

求解:

3)如果數量是N & gtn,那麽有n這個數字的人之前壹定有另壹個數字。(因為原數是1...n)我們怎麽找到n這個數對應的前壹個數?因為N=n+2k+1或者N=n+2k+2,k=(N-n-1)/2。前面的數分別是3k+1和3k+2,(N=n+2k+1或N=n+2k+2給出1=N-n-2k,2=N-n-2k)的意思是3k+(N-N-2k)= 1

  • 上一篇:msp430只能下載兩次,然後顯示BSL初始化失敗
  • 下一篇:diskgenius恢復數據教程
  • copyright 2024編程學習大全網