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









