C語言/跳躍遊戲(Jump Game)
先看要求
題意理解:如題意所示,但注意 “可以跳躍的最大長度”指的是可跳躍範圍!
解題思路:做法有多種,最簡單的利用多重巢狀if-else if-else或多重迴圈巢狀(for、while等)這裡就不演示了。
通過貪心法來解決這道題,每次到達一個位置之後,我們都有一個可以選擇的跳轉範圍,如果在這個範圍裡,我們可以選出最優跳躍路徑(即最遠可以達到哪個位置),就可以直接拋棄其他路徑,進而解決下一步。如此反覆,最後我們就能得出最後可以到達陣列的哪個位置,因此,我們只要掌握了最後能到達哪個位置,就能知道可不可以達到陣列末端了。
思路解決了,但是我們考慮到非負陣列中還有一個特殊的存在,即0。可以跳躍範圍為0的話,就無法進行跳轉了,停在原地。此時分有兩種情況,一是我們在前往陣列末端的路上遇到了0了,那麼我們就不可能達到末尾了,遊戲結束,輸出false.。二是雖然我們遇到了0,但是我們已經在末尾了,遊戲結束,但應該輸出true。所以這裡需要一個判定處理,
程式碼部分(帶詳細註釋)
#include <stdio.h> int main(){ int i,j,z,index=0,insert=0; int a[5],b[5]={0,0,0,0,0}; for(j=0;j<5;j++){ scanf("%d",&a[j]); } for(i=0;i<4;i=i+index ){ if(a[i] == 0){ //可跳轉範圍為0,跳轉結束 if(i!=4){ //當可跳轉範圍為0,但為最後一個元素,說明已走到末尾 break; //跳出迴圈 } else i=4; } for(j=i+1;j<=a[i];j++){ //將下一步所有可走路徑儲存在b[]中 例如: 3 2 1 0 4 中第一個元素的下一步 3->2 3->1 3->0 b[i]=i+a[i]; // 按照下一步的可走路徑將距離值儲存在b[]的 例如:3->2 3->1 3->0(隨便起的名字)距離值:1+2 2+1 3+0 三者可走距離值一樣 } z=sizeof(b) / sizeof(int); for(;z>=0;z--){ //選出最優路徑 並記錄元素位置即下一跳轉(最優) if(insert<b[z]){ //利用for()與if()選出b[]中最大值 index = a[z]; //最優路徑:當陣列下標與陣列元素的值之和最大時,可供選擇的跳轉範圍最遠 insert=b[z]; } } } if(i>=4){ printf("ture\n"); } else printf("false\n"); return 0; }
相關推薦
C語言/跳躍遊戲(Jump Game)
先看要求題意理解:如題意所示,但注意 “可以跳躍的最大長度”指的是可跳躍範圍!解題思路:做法有多種,最簡單的利用多重巢狀if-else if-else或多重迴圈巢狀(for、while等)這裡就不演示了。 通過貪心法來解決這道題,每次到達一個位置
LeetCode 55. 跳躍遊戲(Jump Game)
更新 你在 ron 索引 etc urn -- bre nbsp 題目描述 給定一個非負整數數組,你最初位於數組的第一個位置。 數組中的每個元素代表你在該位置可以跳躍的最大長度。 判斷你是否能夠到達最後一個位置。 示例 1: 輸入: [2,3,1,1,4] 輸
55.跳躍遊戲(Jump Game)
我的GitHub,歡迎捧場:https://github.com/FuGaZn/LeetCode 題目描述 給定一個非負整數陣列,你最初位於陣列的第一個位置。 陣列中的每個元素代表你在該位置可以跳躍的最大長度。 判斷你是否能夠到達最後一個位置。 示例 1: 輸入: [
Leecode 55. 跳躍遊戲(Jump Game)
題目: 給定一個非負整數陣列,你最初位於陣列的第一個位置。 陣列中的每個元素代表你在該位置可以跳躍的最大長度。 判斷你是否能夠到達最後一個位置。 輸入: [2,3,1,1,4] 輸出: true 解釋
c語言消除遊戲(帶排行榜)
程式截圖 先來看下思路 1.初始化視窗 2.開始遊戲 利用方向鍵移動游標 對於可以消除的情況的判斷 記錄相同顏色的位置 小球下降補充新的小球 記錄分數 3.如果計時結束後顯示遊戲結束 4.釋放資源 首先我們需要graphics標頭檔案
2018上C語言程序設計(高級)作業- 第0次作業
原來 高效 成功 加油 專業 今後 kindle 眼神 電子書 1、翻閱鄒欣老師博客關於師生關系博客,並回答下列問題 1)最理想的師生關系是健身教練和學員的關系,在這種師生關系中你期望獲得來自老師的哪些幫助? 師生間的人際關系,是在教學過程中師生交往的基礎上,通
2018上C語言程序設計(高級)作業-第1次作業
alt wid 小數 keyword earch 數組 data can 計算 一.6-1 計算兩數的和與差 1.設計思路: 1)認真讀題,弄清題目已知信息; 2)理清思路,整理組織答案; 3)輸出提交; 4)流程圖如下: 2.實驗代碼如下: v
2018上C語言程序設計(高級)作業- 第2次作業
方法 語句 定義 一個 log 判斷語句 為什麽 字符數組 選擇排序法 作業要求一 : 作業要求二: 6-7 刪除字符串中數字字符 1.設計思路 (1)主要描述算法: 第一步:根據函數接口定義和要求可知本題要起實現刪除一個字符串中的所有數字字符 第二步:首先定義
2018上C語言程序設計(高級)作業-第3次作業
鏈表 can 指針 turn 算法 rcp HA cto 月份 6-1 輸出月份英文名 設計思路 1、算法 第一步:看函數,看函數聲明 第二步:理解分析 2、流程圖如下 代碼如下 char *a[12][15]={"January","February","March","
2018上C語言程序設計(高級)作業- 第4次作業
經驗 怎麽 問題 牢騷 很大的 課程 表現 將不 com 作業要求一 作業要求三、學習總結和進度 1、Git地址: 地址 2、點評3個同學的本周作業(在作業中給出被點評同學博客的鏈接),並邀請3名同學點評你的作業。 點評的三位同學: 3、請用表格和折線圖呈現你本學期的代碼行
加法變乘法——第六屆藍橋杯C語言B組(省賽)第六題
clu 自己 nbsp 加法 藍橋杯 重新 () std spa 原創 加法變乘法 我們都知道:1+2+3+ ... + 49 = 1225現在要求你把其中兩個不相鄰的加號變成乘號,使得結果為2015 比如:1+2+3+...+10*11+12+...+27*28+29+
三羊獻瑞——第六屆藍橋杯C語言B組(省賽)第三題
lan font oid 漢字 print ack size IV cnblogs 原創 三羊獻瑞 觀察下面的加法算式: 祥 瑞 生 輝 + 三 羊 獻 瑞 ------------------- 三 羊 生 瑞 氣 (如果有對齊問題,可以參看【圖1.jp
C語言判斷素數(求素數)(兩種方法)(第二種沒看懂Kkkkk有空一定搞明白)(非原創)
素數又稱質數。所謂素數是指除了 1 和它本身以外,不能被任何整數整除的數,例如17就是素數,因為它不能被 2~16 的任一整數整除。 思路1):因此判斷一個整數m是否是素數,只需把 m 被 2 ~ m-1 之間的每一個整數去除,如果都不能被整除,那麼 m 就是一個素數。 思路2):另
c語言基礎-變數(整型)
一、整型變數 型別 關鍵字 取值範圍 儲存單元位元組數(非固定) 輸出 有符號整型 [signed] int -2147483648~2147483647 4 %d 無
C語言基礎知識(期末嘍)
演算法結構:一、順序結構、選擇結構、迴圈結構;二、迴圈結構又分為while型、until型、for迴圈結構;程式流程圖; 結構化程式設計方法:(1)自頂向下;(2)逐步細化;(3)模組化設計;(4)結構化編碼。 資料型別: 常量:常量包括字面常量、直接常量和符號常量; 變數:C語言規定標誌符只能由字母
c語言課堂筆記(11.24)
結構體作為函式引數時,儘量使用指標(節省空間) 識別符號規定: 1。數字,字母,下劃線構成 2。字母,下劃線為首字母 3。區分大小寫 4。保留字不能用 5。長度小於32字元 c語言為強型別語言必須先定義後使用 注意:陣列不要出現越界錯誤(int a[10]; 這個陣列最多到a[9],出現a[
c語言課堂筆記(11.18)
9的對角乘法表 if語句; 布林變數與零值比較 整型變數與零值比較 浮點變數與零值比較(精度) 指標變數與零值比較(與null比較) 每個case語句的結尾加break否則將多分支重疊 default語句放哪都可以,並且case處理完後最後處理default語句(如果在case之後的話,如
c語言課堂筆記(11.17)
sizeof 計算位元組數 strlen計算字串長度(不包含\0) 例:lello sizeof計算得6(包含\0) strlen計算得5 printf(“%%”)輸出% fflush清空輸入緩衝區 scanf 只能決定寬度不能決定精度(%m) scanf(“%*”)中% 為賦值抑制符(取完
【C語言天天練(十九)】restrict關鍵詞
引言:在核心的系統呼叫函式裡,常常遇到函式的引數使用restrict限定詞限定的情況,以下就對該關鍵詞做個總結。 1、restrict關鍵詞是C99特性才加入的,因此在編譯使用含有該限定詞的程式時,一定要在後邊加入-std=c99的標誌,使得gcc能夠支援c99標準。 2
C語言程式碼規範(程式設計規範)
C語言程式碼規範(程式設計規範) 什麼叫規範?在C語言中不遵守編譯器的規定,編譯器在編譯時就會報錯,這個規定叫作規則。但是有一種規定,它是一種人為的、約定成俗的,即使不按照那種規定也不會出錯,這種規定就叫作規範。 雖然我們不按照規範也不會出錯,但是那樣程式碼寫得就會很亂。大家剛開始學習C語言