題目描述與示例
題目描述
小明在玩一個游戲,游戲規則如下:在游戲開始前,小明站在坐標軸原點處(坐標值為 0)給定一組指令和一個幸運數,每個指令都是一個整數,小明按照指定的要求前進或者后退指定的步數。
前進代表朝坐標軸的正方向走,后退代表朝坐標軸的負方向走,幸運數為一個整數,如果某個指令正好和幸運數相等,則小明行進步數加 1 。
例如:
幸運數為 3 ,指令數組為[2, 3, 0, -5]
指令為 2 ,表示前進 2 步
指令為 3 ,正好好和幸運數相等,前進 3+1=4 步
指令為 0 ,表示原地不動,既不前進,也不后退
指令為 -5 ,表示后退 5 步。
請你計算小明在整個游戲過程中,小明所處的最大坐標值。
輸入描述
第一行輸入 1 個數字,代表指令的總個數 n(1≤n≤100)
第二行輸入 1 個數字,代表幸運數 m(?100≤m≤100)
第三行輸入 n 個指令,每個指令值的取值范圍為: ? 100 ≤ 指令值 ≤ 100
輸出描述
輸出在整個游戲過程中,小明所處的最大坐標值。異常情況下輸出:12345
示例一
輸入
2
1
-5 1
輸出
0
說明
總共 2 個指令,幸運數為 1 ,依照指令行進,依次如下:
游戲開始前,站在坐標軸原點,此時坐標值為 0 ;
指令為 ?5 ,后退 5 步 ,此時坐標值為 ?5 ;
指令為 1 ,正好等于幸運數,前進 1+1=2 步,此時坐標值為 ?3;
整個游戲過程中,小明所處的坐標值依次為[0,?5,?3],最大坐標值為 0 。
示例二
輸入
5
-5
-5 1 6 0 -7
輸出
1
說明
總共 5 個指令,幸運數為 ?5,依照指令行進,依次如下:
游戲開始前,站在坐標軸原點,此時坐標值為 0 ,
指令為 ?5,正好等于幸運數,后退 5+1=6 步,此時坐標值為 ?6;
指令為 1 ,前進 1 步此時坐標值為 ?5 ;
指令為 6 ,前進 6 步此時坐標值為 1 ;
指令為 0 ,既不前進也不后退,此時坐標值為 1 :
指令為 ?7,后退 7 步,此時坐標值為 ?6。
整個游戲過程中,小明所處的坐標值依次為 [0,?6,?5,1,1,?6],最大坐標值為 1 。
題目思路
邏輯模擬題,注意兩點:
1、幸運數為一個整數,如果某個指令正好和幸運數相等,則小明行進步數+1。
2、對輸入參數范圍的校驗,如果不滿足,則輸出異常碼:12345。
參考代碼
import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner scanner = new Scanner(System.in);int n = scanner.nextInt();if (n < 1 || n > 100) {// 異常情況System.out.println(12345);return;}int m = scanner.nextInt();if (m < -100 || m > 100) {// 異常情況System.out.println(12345);return;}int[] nums = new int[n];for (int i = 0; i < n; i++) {nums[i] = scanner.nextInt();if (nums[i] < -100 || nums[i] > 100) {// 異常情況System.out.println(12345);return;}}int cur_pos = 0, ans = 0;for (int num : nums) {if (num == 0) {continue;}if (num == m) {cur_pos += (num > 0) ? 1 : -1;}cur_pos += num;ans = Math.max(ans, cur_pos);}System.out.println(ans);}
}