Swift循環(huán)總結

1.Craps賭博問題

賭博規(guī)則:
??給出兩個色子第一次若搖出7,11點玩家贏灸芳,若搖出的是2涝桅,3,12點則莊家贏烙样,有人勝利則結束本局游戲冯遂,搖出其余點數(shù)繼續(xù)搖,從第二次開始谒获,若搖出的是7點則莊家贏蛤肌,若搖出的與第一次搖出的點數(shù)相同才玩家贏,若搖出其余點數(shù)繼續(xù)搖批狱,規(guī)則同第二次裸准,一直到有人贏,本局游戲結束


完整代碼:

func roll() -> Int {
    return Int(arc4random_uniform(6)) + 1
}

var money = 3000
repeat {
    print("玩家當前資產(chǎn)\(money)元")
    var debt: Int
    repeat {
        print("請下注:", terminator: "")
        debt = inputInt()
    } while money < debt || debt <= 0
    let firstPoint = roll() + roll()
    var needGoOn = false
    print("第1次搖\(firstPoint)點")
    switch firstPoint {
    case 7,11:
        print("玩家勝E饬颉3淳恪!")
        money += debt
    case 2,3,12:
        print("莊家勝X酝!O蚝!")
        money -= debt
    default:
        needGoOn = true
    }
    var index = 2
    while needGoOn {
        let currentPoint = roll() + roll()
        print("第\(index)次搖\(currentPoint)點")
        if currentPoint == firstPoint {
            money += debt
            print("玩家勝>辍=┣邸!")
            needGoOn = false
        }
        else if currentPoint == 7 {
            money -= debt
            print("莊家勝P』薄D磁伞!")
            needGoOn = false
        }
        index += 1
    }
} while money > 0
print("你破產(chǎn)了T涮<恪!")

總結:
??在這個賭博游戲中充分運用了我們學到的循環(huán)控嗜,條件選擇等知識茧彤,repeat在這里運用了兩次,最外面的一次是限制了玩家有錢就繼續(xù)玩疆栏,沒錢就退出循環(huán)曾掂,第二次運用是讓玩家下正確的賭注惫谤,若賭注大于總資產(chǎn)或下注小于等于0就重復要求繼續(xù)下賭注,直到正確下好賭注珠洗,游戲才開始溜歪,后面運用了while循環(huán),充分展示了repeat至少要展示一次和while滿足條件才執(zhí)行的區(qū)別许蓖,若是while循環(huán)蝴猪,上面的賭注初始化時就必須先賦值,至于if語句和switch語句相差不多膊爪,但switch語句展示的更清晰,分支越多switch相對于if越好
注意: 這里的隨機數(shù)必須為16,用兩顆色子自阱,如果用一個數(shù)表示兩個色子,即隨機數(shù)必須為212米酬,會讓他們出現(xiàn)的概率相等



2.百錢百雞問題

**問題:
??已知公雞5元1只动壤,母雞3元1只,小雞1元3只淮逻,如何用100元買一百只雞
**


代碼:

for x in 0...20 {
    for y in 0...33 {
        let z = 100 - x - y
        if (5 * x + 3 * y + z / 3 == 100) && z % 3 == 0 {
            print("公雞:\(x)只, 母雞:\(y)只, 小雞:\(z)只")
        }
    }
}

總結
??這個百錢百雞問題充分運用了窮舉,他改變了我的傳統(tǒng)數(shù)學思維模式阁簸,我當時看到這個題時爬早,第一想法就是列出三元一次方程組,自己可以求解启妹,但怎么讓計算機求解呢筛严,我卡殼了。但看到老師的解法過程后饶米,怎么說呢桨啃,感覺自己頓悟了,對計算機的理解升華了檬输,不再是以前的數(shù)學思維模式了照瘾,覺得窮舉法才是計算機的真正計算方法,窮舉法對我們不適用丧慈,但對于計算機來說才是最簡單的



3.數(shù)組排序問題

var array = [29, 98, 35, 12, 47, 66, 53, 79]

// 冒泡排序: 兩兩比較, 前面的元素比后面的元素大就交換位置
for i in 0..<array.count - 1 {
    var swapped = false
    for j in 0..<array.count - 1 - i {
        if array[j] > array[j + 1] {
            (array[j], array[j + 1]) = (array[j + 1], array[j])
            swapped = true
        }
    }
    if !swapped {
        break
    }
}
print(array)


// 簡單選擇排序: 每次從剩下元素中找最小的元素放到對應的位置
for i in 0..<array.count - 1 {
    var minIndex = i
    for j in i + 1..<array.count {
        if array[j] < array[minIndex] {
            minIndex = j
        }
    }
    (array[i], array[minIndex]) = (array[minIndex], array[i])
}
print(array)


總結 + 理解
??在Swift語言中數(shù)組有自己排序的函數(shù)析命,但這兩種方式的排序思維是很重要的。
假設是從小到大排序
選擇排序有兩個循環(huán)逃默,內(nèi)循環(huán)是從一個未進行排好序的位置的數(shù)依次與所有元素比較大小鹃愤,外循環(huán)才是給數(shù)組排序,其主要的思想就是用minIndex記住數(shù)組中最小值所對應的索引號完域,首先默認minIndex的值為未進行排序數(shù)組的第一個元素索引號软吐,從第二個位置與之開始循環(huán)比較,比較minIndex所對應的值與當前循環(huán)數(shù)組中所對應的值的大小吟税,若minIndex所對應的值較大凹耙,就把當前循環(huán)數(shù)組中所對應的值賦值給minIndex姿现,然后拿最小值與下一個數(shù)作比較,直到比較完所有的元素使兔,即內(nèi)循環(huán)結束建钥,minIndex的最終值就是數(shù)組中最小值的索引,然后和第一個位置互換位置虐沥,第一個位置就是最小值了熊经;再執(zhí)行外循環(huán)第二次,由于第一個位置已排好序欲险,從第二個位置開始執(zhí)行內(nèi)循環(huán)镐依,同上,直到倒數(shù)第二個位置已排好序天试,即外循環(huán)結束槐壳,最終數(shù)組排好序
冒泡排序也是用了兩個循環(huán),他和選擇排序最大的區(qū)別就是他是兩兩比較得出大小后就交換位置喜每,不需要記下標务唐,直到把最大數(shù)送到數(shù)組中元素的最后,再從剩余數(shù)中再比較带兜,送到剩余數(shù)組中元素的最后枫笛,一直循環(huán),直到第二個元素排好序刚照,即外循環(huán)結束
冒泡排序相對于選擇排序的優(yōu)點是刑巧,他是循環(huán)一次外循環(huán)后,判斷有沒有元素位置發(fā)生改變无畔,若改變了啊楚,繼續(xù)執(zhí)行程序,若沒有改變則說明剩余數(shù)中的位置已是排好序了的浑彰,強行終止循環(huán)恭理。對于將要有規(guī)律的數(shù)組來說,冒泡排序是第一選擇



4.分魚問題

**問題:
??五個人一起打了一天的魚闸昨,晚上他們各自回房睡覺蚯斯,到了第二天,其中一個先醒來饵较,他把魚分成了5份拍嵌,發(fā)現(xiàn)還多了1條,他就扔掉了循诉,拿了屬于自己的那份就走了横辆;接著第二個人又醒了,他也把魚分成了5份茄猫,發(fā)現(xiàn)還多了1條狈蚤,他就扔掉了困肩,拿了屬于自己的那份就走了;后面的人依次醒來脆侮,都做了同樣的事情锌畸,請問魚總共有多少條?
**


代碼:

// 從后往前推
var total = 1
while true {
    var fish = total
    var isEnough = true
    for _ in 1...5 {
        if fish * 5 % 4 == 0 {    
 // 取走的一份與剩下的4份的四分之一相等靖避,可以理解為: fish + 1/4fish + 1
            fish = fish * 5 / 4 + 1
        }
        else {
            isEnough = false
            break
        }
    }
    if isEnough {
        print(fish)
        break
    }
    total += 1
}

// 從前往后推
var total = 1
var isEnough = false
while !isEnough {
    var fish = total
    isEnough = true
    for _ in 1...5 {
        if (fish - 1) % 5 == 0 {
            fish = (fish - 1) / 5 * 4
        }
        else {
            isEnough = false
            break
        }
    }
    total += 1
}
print(total - 1)

總結
??這個分魚問題也運用了窮舉潭枣,他們的思路其實都一樣,只是把條件倒過來幻捏,結果也就倒過來了盆犁,不過倒推fish為魚的總數(shù),順推total為魚的總數(shù)篡九,但比較兩種方法谐岁,從后往前推計算機計算的次數(shù)要小于從前往后的次數(shù),計算機計算所需要花費的時間也就少些榛臼,當人數(shù)越來越多時他們所需要花費的時間差距也就越大伊佃,相比較此方法倒推較好

最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市沛善,隨后出現(xiàn)的幾起案子锭魔,更是在濱河造成了極大的恐慌,老刑警劉巖路呜,帶你破解...
    沈念sama閱讀 223,002評論 6 519
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異织咧,居然都是意外死亡胀葱,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,357評論 3 400
  • 文/潘曉璐 我一進店門笙蒙,熙熙樓的掌柜王于貴愁眉苦臉地迎上來抵屿,“玉大人,你說我怎么就攤上這事捅位≡穑” “怎么了?”我有些...
    開封第一講書人閱讀 169,787評論 0 365
  • 文/不壞的土叔 我叫張陵艇搀,是天一觀的道長尿扯。 經(jīng)常有香客問我,道長焰雕,這世上最難降的妖魔是什么衷笋? 我笑而不...
    開封第一講書人閱讀 60,237評論 1 300
  • 正文 為了忘掉前任,我火速辦了婚禮矩屁,結果婚禮上辟宗,老公的妹妹穿的比我還像新娘爵赵。我一直安慰自己,他們只是感情好泊脐,可當我...
    茶點故事閱讀 69,237評論 6 398
  • 文/花漫 我一把揭開白布空幻。 她就那樣靜靜地躺著,像睡著了一般容客。 火紅的嫁衣襯著肌膚如雪秕铛。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,821評論 1 314
  • 那天耘柱,我揣著相機與錄音如捅,去河邊找鬼。 笑死调煎,一個胖子當著我的面吹牛镜遣,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播士袄,決...
    沈念sama閱讀 41,236評論 3 424
  • 文/蒼蘭香墨 我猛地睜開眼悲关,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了娄柳?” 一聲冷哼從身側響起寓辱,我...
    開封第一講書人閱讀 40,196評論 0 277
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎赤拒,沒想到半個月后秫筏,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,716評論 1 320
  • 正文 獨居荒郊野嶺守林人離奇死亡挎挖,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,794評論 3 343
  • 正文 我和宋清朗相戀三年这敬,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片蕉朵。...
    茶點故事閱讀 40,928評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡崔涂,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出始衅,到底是詐尸還是另有隱情冷蚂,我是刑警寧澤,帶...
    沈念sama閱讀 36,583評論 5 351
  • 正文 年R本政府宣布汛闸,位于F島的核電站蝙茶,受9級特大地震影響,放射性物質發(fā)生泄漏诸老。R本人自食惡果不足惜尸闸,卻給世界環(huán)境...
    茶點故事閱讀 42,264評論 3 336
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧吮廉,春花似錦苞尝、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,755評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至调卑,卻和暖如春抡砂,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背恬涧。 一陣腳步聲響...
    開封第一講書人閱讀 33,869評論 1 274
  • 我被黑心中介騙來泰國打工注益, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人溯捆。 一個月前我還...
    沈念sama閱讀 49,378評論 3 379
  • 正文 我出身青樓丑搔,卻偏偏與公主長得像,于是被迫代替她去往敵國和親提揍。 傳聞我的和親對象是個殘疾皇子啤月,可洞房花燭夜當晚...
    茶點故事閱讀 45,937評論 2 361

推薦閱讀更多精彩內(nèi)容

  • 第一章 緒論 什么是數(shù)據(jù)結構? 數(shù)據(jù)結構的定義:數(shù)據(jù)結構是相互之間存在一種或多種特定關系的數(shù)據(jù)元素的集合劳跃。 第二章...
    SeanCheney閱讀 5,787評論 0 19
  • 1.插入排序—直接插入排序(Straight Insertion Sort) 基本思想: 將一個記錄插入到已排序好...
    依依玖玥閱讀 1,262評論 0 2
  • 第5章 引用類型(返回首頁) 本章內(nèi)容 使用對象 創(chuàng)建并操作數(shù)組 理解基本的JavaScript類型 使用基本類型...
    大學一百閱讀 3,239評論 0 4
  • 概述 排序有內(nèi)部排序和外部排序谎仲,內(nèi)部排序是數(shù)據(jù)記錄在內(nèi)存中進行排序,而外部排序是因排序的數(shù)據(jù)很大刨仑,一次不能容納全部...
    蟻前閱讀 5,191評論 0 52
  • 1. 打印View所有子視圖 2. NSString過濾特殊字符 3. TransForm屬性 4. 去掉分割線多...
    Super_Yuan閱讀 486評論 0 0