日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
創(chuàng)新互聯(lián)GoFrame教程:GoFramegring-基本使用

約瑟夫問題

我們使用?ring?來模擬一下約瑟夫問題:

成都創(chuàng)新互聯(lián)公司-專業(yè)網(wǎng)站定制、快速模板網(wǎng)站建設(shè)、高性價(jià)比志丹網(wǎng)站開發(fā)、企業(yè)建站全套包干低至880元,成熟完善的模板庫,直接使用。一站式志丹網(wǎng)站制作公司更省心,省錢,快速模板網(wǎng)站建設(shè)找我們,業(yè)務(wù)覆蓋志丹地區(qū)。費(fèi)用合理售后完善,十多年實(shí)體公司更值得信賴。

著名猶太歷史學(xué)家 Josephus有過以下的故事:在羅馬人占領(lǐng)喬塔帕特后,39 個(gè)猶太人與Josephus及他的朋友躲到一個(gè)洞中,39個(gè)猶太人決定寧愿死也不要被敵人抓到,于是決定了一個(gè)自殺方式,41個(gè)人排成一個(gè)圓圈,由第1個(gè)人開始報(bào)數(shù),每報(bào)數(shù)到第3人該人就必須自殺,然后再由下一個(gè)重新報(bào)數(shù),直到所有人都自殺身亡為止。然而Josephus 和他的朋友并不想遵從。首先從一個(gè)人開始,越過k-2個(gè)人(因?yàn)榈谝粋€(gè)人已經(jīng)被越過),并殺掉第k個(gè)人。接著,再越過k-1個(gè)人,并殺掉第k個(gè)人。這個(gè)過程沿著圓圈一直進(jìn)行,直到最終只剩下一個(gè)人留下,這個(gè)人就可以繼續(xù)活著。問題是,給定了和,一開始要站在什么地方才能避免被處決?

以下示例為非并發(fā)安全場景。

package main

import (
    "fmt"
    "github.com/GOgf/gf/v2/container/gring"
)

type Player struct {
    position int  // 位置
    alive    bool // 是否存活
}

const (
    playerCount = 41  // 玩家人數(shù)
    startPos    = 1   // 開始報(bào)數(shù)位置
)

var (
    deadline = 3
)

func main() {
    r := gring.New(playerCount)

    // 設(shè)置所有玩家初始值
    for i := 1; i <= playerCount; i++ {
        r.Put(&Player{i, true})
    }

    // 如果開始報(bào)數(shù)的位置不為1,則設(shè)置開始位置
    if startPos > 1 {
        r.Move(startPos - 1)
    }

    counter   := 1  // 報(bào)數(shù)從1開始,因?yàn)橄旅娴难h(huán)從第二個(gè)開始計(jì)算
    deadCount := 0  // 死亡人數(shù),初始值為0

    // 直到所有人都死亡,否則循環(huán)一直執(zhí)行
    for deadCount < playerCount {
        // 跳到下一個(gè)人
        r.Next()

        // 如果是活著的人,則報(bào)數(shù)
        if r.Val().(*Player).alive {
            counter++
        }

        // 如果報(bào)數(shù)為deadline,則此人淘汰出局
        if counter == deadline {
            r.Val().(*Player).alive = false
            fmt.Printf("Player %d died!\n", r.Val().(*Player).position)
            deadCount++
            counter = 0
        }
    }
}

執(zhí)行后,輸出結(jié)果為:

Player 3 died!
Player 6 died!
Player 9 died!
Player 12 died!
Player 15 died!
Player 18 died!
Player 21 died!
Player 24 died!
Player 27 died!
Player 30 died!
Player 33 died!
Player 36 died!
Player 39 died!
Player 1 died!
Player 5 died!
Player 10 died!
Player 14 died!
Player 19 died!
Player 23 died!
Player 28 died!
Player 32 died!
Player 37 died!
Player 41 died!
Player 7 died!
Player 13 died!
Player 20 died!
Player 26 died!
Player 34 died!
Player 40 died!
Player 8 died!
Player 17 died!
Player 29 died!
Player 38 died!
Player 11 died!
Player 25 died!
Player 2 died!
Player 22 died!
Player 4 died!
Player 35 died!
Player 16 died!
Player 31 died!

可以看到16和31是最后兩個(gè)出隊(duì)列的,因此Josephus將他的朋友與自己安排在第16個(gè)與第31個(gè)位置是安全的。


標(biāo)題名稱:創(chuàng)新互聯(lián)GoFrame教程:GoFramegring-基本使用
鏈接分享:http://www.dlmjj.cn/article/coppdoj.html