演算法小題(六):EatingDays
阿新 • • 發佈:2018-12-11
18年愛奇藝秋招題目:局長與食物
原題目
菊長有有N種食物,每種食物有Ai 份。
每天局長會吃一份食物,或買一份食物(即每天只進行一項行為),
就醬過了M 天,現在局長想知道M 天后第p種食物的份數排名(從大到小,相同算並列)
/** * 1.局長有N種食物,每種食物Ai份,i代表食物號碼1~N * 2.局長每天吃一份食物,或買一份食物(進食或買食) * 3.過了M天,求第p種食物的剩餘份數排名情況 * * input: 第1行 N M P * 第2行 N個Ai[A1,A2...AN] * 接下來M行 [A i|B i] [買一份 食物i | 吃一份 食物i] * * output: 一個結果 * @author Leonardo */
樣例 input:3 4 2
5 3 1
B 1
A 2
A 2
B 3
output:1
程式碼如下:
package IQIYI; import java.util.Scanner; public class EatingDays { public static void main(String[] args){ Scanner sc = new Scanner(System.in); String str = sc.nextLine(); int n = Integer.parseInt(str.split(" ")[0]); int m = Integer.parseInt(str.split(" ")[1]); int p = Integer.parseInt(str.split(" ")[2]); // 每種食物的份數 String str2 = sc.nextLine(); int[] food = new int[n]; for (int i = 0; i < food.length; i++) { food[i] = Integer.parseInt(str2.split(" ")[i]); } // 模擬M天的動作 String[] strM = new String[m]; for (int i = 0; i < strM.length; i++) { strM[i] = sc.nextLine(); String action = strM[i].split(" ")[0]; int num = Integer.parseInt(strM[i].split(" ")[1]); if(action.equals("A")){ food[num]++; }else{ food[num]--; } } // 求排名 int numOfFood = food[p-1]; int x = 1; // 最高排名為1 for(int i=0; i<food.length; i++){ if(numOfFood < food[i]){ x++; } } System.out.println(x); } }