網(wǎng)上有很多關(guān)于pos機(jī)游戲解決方案,自學(xué) C++ 第 7 課 跳躍游戲的知識,也有很多人為大家解答關(guān)于pos機(jī)游戲解決方案的問題,今天pos機(jī)之家(m.afbey.com)為大家整理了關(guān)于這方面的知識,讓我們一起來看下吧!
本文目錄一覽:
pos機(jī)游戲解決方案
跳躍游戲規(guī)則描述:先給定一個非負(fù)整數(shù)數(shù)組nums,例如 [4,4,0,2,3,3,1,2,4,2],假定一臺機(jī)器人要從nums[0]起跳,num[0]元素的值表示能跳躍的最大距離,也就是說,機(jī)器人第一次可跳躍到(4,0,2,3)中任意位置,第二次跳躍從第一次跳躍的落腳點(diǎn)起跳,可跳躍的最大距離是第一次跳躍的落腳點(diǎn)元素值。如果落腳點(diǎn)元素的值為0,表示無法跳躍。問,機(jī)器人針對一個給定數(shù)組(假設(shè)有n個元素),從nums[0]到nums[n-1],最少需要跳躍幾次?并標(biāo)記出每次跳躍落腳點(diǎn)的坐標(biāo)。
跳躍游戲需要每次做出選擇時,都要選擇下一次能夠有更多選擇或者更遠(yuǎn)距離的位置,每一次選擇都是最優(yōu)選擇,最后累積出的結(jié)果也是最優(yōu)的解。完成跳躍游戲的程序和算法很多,如何分析、推導(dǎo)其過程以及所有可能情況,通過目前所學(xué)的有限編程知識完成上述功能?
分析第一次跳躍過程,從nums[0](nums[0]≠0)起跳,首先判斷nums[0+1]到nums[0+nums[0]]區(qū)間內(nèi)各元素能達(dá)到的最大邊界 maxpos1 = j+nums[0+j],j 值范圍為1到nums[0],并獲得第一次跳躍落腳點(diǎn)的坐標(biāo) indexx1。數(shù)組nums為[4,4,0,2,3,3,1,2,4,2]時,第一次跳躍每個可選落腳點(diǎn)所能達(dá)到的最大邊界maxpos1分別為 1+4=5;2+0=2 (0 無法跳躍);3+2=5;4+3=7;所以最優(yōu)選擇的落腳點(diǎn)坐標(biāo) indexx1=4。如果數(shù)組nums變?yōu)閇4,4,0,4,3,3,1,2,4,2],那么會出現(xiàn)兩個最大值,對于跳躍過程中出現(xiàn)的多個解,為了方便程序處理,皆取最后一個滿足maxpos1的元素坐標(biāo)。
第一次跳躍
第二跳躍,是從nums[indexx1]起跳,判斷nums[indexx1+1]到nums[indexx1+nums[indexx1]]區(qū)間內(nèi)各元素能達(dá)到的最大邊界maxpos2 = j+nums[indexx1+j],j值范圍為1到nums[indexx1],并獲得第一次跳躍落腳點(diǎn)的坐標(biāo) indexx2。對于數(shù)組[4,4,0,2,3,3,1,2,4,2],從nums[4]起跳,第二次跳躍每個可選落腳點(diǎn)所能達(dá)到的最大邊界maxpos2分別為1+3=4;2+1=3;3+2=5;所以最優(yōu)選擇的落腳點(diǎn)坐標(biāo) indexx2=indexx1+3=7。
第二次跳躍
第三次跳躍以此類推,通過判斷indexx2+maxpos3的值是否大于等于9來確定,下一跳躍是否能夠到達(dá)nums[9],數(shù)組[4,4,0,2,3,3,1,2,4,2]的indexx2+maxpos3等于9,所以最少需要3次跳躍到達(dá)終點(diǎn)。
對于非零數(shù)組nums,還存在幾種特殊情況:
一是nums[0]等于0,即無法起跳,例如[0,1,2,3,1];
二是nums[0]大于或等于n-1,即一次跳躍即可到達(dá)終點(diǎn),例如[5,2,3,0,1,6];
三是所有選擇的最終落腳點(diǎn)皆為0,即無法繼續(xù)跳躍,例如[3,2,1,0,1,2,3]或[3,3,2,1,0,1]
根據(jù)上述分析,除了sums[]數(shù)組,每次跳躍后可能達(dá)到的最大邊界和落腳點(diǎn)坐標(biāo)分別用兩個數(shù)組maxpos[]和indexx[],使用vector聲明數(shù)組并默認(rèn)初始化為0。
vector 一維數(shù)組
編寫的程序&注解
測試結(jié)果
知識點(diǎn):
? fmax(x,y); 返回兩個參數(shù)中的最大值,該函數(shù)定義于<cmath>標(biāo)準(zhǔn)庫頭文件中。英文對照說明:fmax() function is a library function of cmath header, it is used to find the maximum value of the given numbers, it accepts two number and returns the larger one.
? || 是邏輯或運(yùn)算符,只要運(yùn)算符||兩邊表達(dá)式有一個為ture,運(yùn)算結(jié)果就為ture,判斷語句執(zhí)行;只有運(yùn)算符||兩邊表達(dá)式均為false,運(yùn)算結(jié)果才是false,判斷語句不執(zhí)行;如果前面一個表達(dá)式為true,那么就不會再執(zhí)行和判斷后面的表達(dá)式。
|| 運(yùn)算符示例
? break作用是結(jié)束跳出循環(huán)體,直接執(zhí)行循環(huán)體以外的下一行語句。在單個循環(huán)語句中,break作用是跳出該循環(huán)語句;在嵌套循環(huán)中,break作用是跳出最近的循環(huán),并且不影響外層的循環(huán)。
自學(xué) C++ 第 1 課 數(shù)字大小排序
自學(xué) C++ 第 2 課 數(shù)組包含關(guān)系
自學(xué) C++ 第 3 課 正整數(shù)反序輸出
自學(xué) C++ 第 4 課 計(jì)算體積及表面積
自學(xué) C++ 第 5 課 楊輝三角
自學(xué) C++ 第 6 課 二維數(shù)組找最值
以上就是關(guān)于pos機(jī)游戲解決方案,自學(xué) C++ 第 7 課 跳躍游戲的知識,后面我們會繼續(xù)為大家整理關(guān)于pos機(jī)游戲解決方案的知識,希望能夠幫助到大家!
