最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

深入理解約瑟夫環(huán)的數(shù)學優(yōu)化方法

 更新時間:2013年05月24日 09:36:51   作者:  
本篇文章是對約瑟夫環(huán)的數(shù)學優(yōu)化方法進行了詳細的分析介紹,需要的朋友參考下
首先,約瑟夫環(huán)的數(shù)學優(yōu)化方法為:
為了討論方便,先把問題稍微改變一下,并不影響原意:問題描述:n個人(編號0~(n-1)),從0開始報數(shù),報到(m-1)的退出,剩下的人繼續(xù)從0開始報數(shù)。求勝利者的編號。
我們知道第一個人(編號一定是(m-1)%n) 出列之后,剩下的n-1個人組成了一個新的約瑟夫環(huán)(以編號為k=m%n的人開始):      k k+1 k+2 ... n-2, n-1, 0, 1, 2, ... k-2   并且從k開始報0。現(xiàn)在我們把他們的編號做一下轉換:
k --> 0   k+1 --> 1   k+2 --> 2
n-1 --> n-1-k     0--> n-k  
        ... ...   
k-3 --> n-3   k-2 --> n-2
序列1: 1, 2, 3, 4, …, n-2, n-1, n
序列2: 1, 2, 3, 4, … k-1, k+1, …, n-2, n-1, n
序列3: k+1, k+2, k+3, …, n-2, n-1, n, 1, 2, 3,…, k-2, k-1   
序列4:1, 2, 3, 4, …, 5, 6, 7, 8, …, n-2, n-1   
變換后就完完全全成為了(n-1)個人報數(shù)的子問題,假如我們知道這個子問題的解:例如x是最終的勝利者,那么根據(jù)上面這個表把這個x變回去不剛好就是n個人情況的解嗎???!變回去的公式很簡單,相信大家都可以推出來:
∵ k=m%n;   
∴ x' = x+k = x+ m%n ; 而 x+ m%n 可能大于n
∴x'= (x+ m%n)%n = (x+m)%n   得到 x‘=(x+m)%n
如何知道(n-1)個人報數(shù)的問題的解?對,只要知道(n-2)個人的解就行了。(n-2)個人的解呢?當然是先求(n-3)的情況 ---- 這顯然就是一個倒推問題!好了,思路出來了,下面寫遞推公式:
令f表示i個人玩游戲報m退出最后勝利者的編號,最后的結果自然是f[n].
遞推公式:   f[1]=0;   f[i]=(f[i-1]+m)%i; (i>1)
完整的實現(xiàn)代碼如下:
復制代碼 代碼如下:

/*
約瑟夫環(huán)遞推公式:令f[i]表示i個人玩游戲報m退出最后勝利者的編號,最后的結果自然是f[n] 
遞推公式  f[1]=0;  f[i]=(f[i-1]+m)%i; (i>1)
*/
#include "stdio.h"
#include "stdlib.h"
int main(void)
{
 int n, m,i, f[20]={0};
 scanf("%d %d",&n,&m);
    for(i=2;i<=n;i++)
 {
  f[i]=(f[i-1]+m)%i;
  printf("%d個人報數(shù),報到%d的出列,最后的勝者下標為%d\n", i,m,f[i]);
 }
    printf("The winner is %d\n", f[n]+1);
 system("pause");
}

優(yōu)化后的代碼為:
復制代碼 代碼如下:

#include "stdio.h"
#include "stdlib.h"
int main(void)
{
    int n, m,i, s=0;
 scanf("%d %d",&n,&m);
    for(i=2;i<=n;i++)
 {
  s=(s+m)%i;
 }
    printf("The winner is %d\n", s+1);
 system("pause");
}

相關文章

  • c++實現(xiàn)簡單的線程池

    c++實現(xiàn)簡單的線程池

    本文介紹的線程池采用C++語言,在windows平臺下實現(xiàn)。本著技術分享的精神寫作本文同時公布源代碼。歡迎大家指出該線程池存在的問題并對當前性能進行討論。
    2015-03-03
  • C語言菜鳥基礎教程之單精度浮點數(shù)與雙精度浮點數(shù)

    C語言菜鳥基礎教程之單精度浮點數(shù)與雙精度浮點數(shù)

    在C語言中,單精度浮點數(shù)(float)和雙精度浮點數(shù)(double)類型都是用來儲存實數(shù)的,雙精度是用記憶較多,有效數(shù)字較多,數(shù)值范圍較大。
    2017-10-10
  • C++?構造函數(shù)和析構函數(shù)(Constructors?&?Destructors)詳解

    C++?構造函數(shù)和析構函數(shù)(Constructors?&?Destructors)詳解

    由于global?object的誕生比程序進入更早點,所以global?object的constructor執(zhí)行的時間更早于程序的進入點,所謂的default?constructor就是沒有指定任何的參數(shù)的constructor,這篇文章主要介紹了C++?構造函數(shù)和析構函數(shù)的相關知識,需要的朋友可以參考下
    2024-05-05
  • C++中Cbitmap,HBitmap,Bitmap區(qū)別及聯(lián)系

    C++中Cbitmap,HBitmap,Bitmap區(qū)別及聯(lián)系

    這篇文章主要介紹了C++中Cbitmap,HBitmap,Bitmap區(qū)別及聯(lián)系的相關資料,需要的朋友可以參考下
    2015-06-06
  • C語言責任鏈模式示例代碼

    C語言責任鏈模式示例代碼

    大家好,本篇文章主要講的是C語言責任鏈模式示例代碼,感興趣的同學趕快來看一看吧,對你有幫助的話記得收藏一下,方便下次瀏覽
    2022-01-01
  • 深入遍歷二叉樹的各種操作詳解(非遞歸遍歷)

    深入遍歷二叉樹的各種操作詳解(非遞歸遍歷)

    本篇文章是對遍歷二叉樹的各種操作進行了詳細的分析介紹,需要的朋友參考下
    2013-05-05
  • C語言分支和循環(huán)詳解

    C語言分支和循環(huán)詳解

    C語言是一門結構化的程序設計語言,當C語言用來描述生活中的事物時,會用到三種結構:順序結構(不去贅述),選擇結構(對應分支語句),循環(huán)結構(對應循環(huán)語句),分支語句:分支語句分為兩種,一種是if語句,一種是switch語句
    2021-10-10
  • C++實現(xiàn)LeetCode(170.兩數(shù)之和之三 - 數(shù)據(jù)結構設計)

    C++實現(xiàn)LeetCode(170.兩數(shù)之和之三 - 數(shù)據(jù)結構設計)

    這篇文章主要介紹了C++實現(xiàn)LeetCode(170.兩數(shù)之和之三 - 數(shù)據(jù)結構設計),本篇文章通過簡要的案例,講解了該項技術的了解與使用,以下就是詳細內容,需要的朋友可以參考下
    2021-08-08
  • C++變量和基本類型詳解

    C++變量和基本類型詳解

    這篇文章主要介紹了C++變量和基本類型,,一定要注意局部變量與全局變量的作用范圍,需要的朋友可以參考下,希望能夠給你帶來幫助
    2021-10-10
  • Eclipse中C++連接mysql數(shù)據(jù)庫

    Eclipse中C++連接mysql數(shù)據(jù)庫

    這篇文章主要為大家詳細介紹了Eclipse中C++連接mysql數(shù)據(jù)庫 ,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-06-06

最新評論

会东县| 平顶山市| 澜沧| 罗平县| 静安区| 镇平县| 宁乡县| 永城市| 安图县| 通州市| 普陀区| 甘谷县| 安西县| 临沧市| 望城县| 准格尔旗| 若羌县| 新野县| 墨江| 小金县| 盘锦市| 商南县| 湖州市| 禄丰县| 宜都市| 道真| 韶关市| 襄垣县| 盐亭县| 鹿泉市| 九龙坡区| 呼伦贝尔市| 蕉岭县| 阿克苏市| 扬中市| 六盘水市| 闽清县| 麻城市| 彭水| 林州市| 寻甸|