#29895: 找出數字該放哪個位置的方法


wer12369qaz15963@gmail.com (dentr)

學校 : 新北市立清水高中
編號 : 174903
來源 : [111.248.152.60]
最後登入時間 :
2022-07-26 15:13:49
d166. 反轉表 -- w11123 | From: [219.84.98.239] | 發表日期 : 2022-04-09 16:01

a1=2 , a2=3 , a3=6 , a4=4 , a5=0 , a6=2  , a7=2 , a8=1 , a9=0
輸入: 2 3 6 4 0 2 2 1 0
用這個為例子
先搞一個ArrayList 來放目前已經被放置的index
第一個要放1
前面會有兩個空格
放完之後:
_ _ 1 _ _ _ _ _ _

把 放完之後的 index 放入ArrayList裡(現在裡面有 2)
接下來放2
2前面有3個空格
先假設每一格都還沒有數字放置
2應該會在 index 3
_ _ _ 2 _ _ _ _ _

開始用 index 3 跟 ArrayList 裡面的所有東西 一一做比較 (看裡面有沒有小於等於我們目前要放的位置)
ArrayList 裡面的2 比3 小 (小於等於都)
即可知道 前面3格有一個數字 所以我們要放的位置往前挪一格 變4
ArrayList 已沒有東西能比較
所以4即為放置的位置
把4也丟入 ArrayList (ArrayList裡面有 2 , 4)
注意: ArrayList 要進行排序 因為 是從小到大進行比較
目前已放置的會是

 _ _ 1 _ 2 _ _ _ _

接下來同理

再把作為答案的陣列貼出 即為答案

 
#29896: Re:找出數字該放哪個位置的方法


wer12369qaz15963@gmail.com (dentr)

學校 : 新北市立清水高中
編號 : 174903
來源 : [111.248.152.60]
最後登入時間 :
2022-07-26 15:13:49
d166. 反轉表 -- w11123 | From: [219.84.98.239] | 發表日期 : 2022-04-09 16:06

a1=2 , a2=3 , a3=6 , a4=4 , a5=0 , a6=2  , a7=2 , a8=1 , a9=0
輸入: 2 3 6 4 0 2 2 1 0
用這個為例子
先搞一個ArrayList 來放目前已經被放置的index
第一個要放1
前面會有兩個空格
放完之後:
_ _ 1 _ _ _ _ _ _

把 放完之後的 index 放入ArrayList裡(現在裡面有 2)
接下來放2
2前面有3個空格
先假設每一格都還沒有數字放置
2應該會在 index 3
_ _ _ 2 _ _ _ _ _

開始用 index 3 跟 ArrayList 裡面的所有東西 一一做比較 (看裡面有沒有小於等於我們目前要放的位置)
ArrayList 裡面的2 比3 小 (小於等於都)
即可知道 前面3格有一個數字 所以我們要放的位置往前挪一格 變4
ArrayList 已沒有東西能比較
所以4即為放置的位置
把4也丟入 ArrayList (ArrayList裡面有 2 , 4)
注意: ArrayList 要進行排序 因為 是從小到大進行比較
目前已放置的會是

 _ _ 1 _ 2 _ _ _ _

接下來同理

再把作為答案的陣列貼出 即為答案


我寫的是 Java 如果需要code(建議自己打一遍): 

package zerojudge.zerojudge_d;
import java.util.Collections;
import java.util.Scanner;
import java.util.ArrayList;

public class d166 {
public static void main(String[]args){
Scanner input = new Scanner(System.in);
while (input.hasNextLine()){
String b = input.nextLine();
if (b.equals("")){
continue;
}
String[] q = b.split(" ");
int[] ans = new int[q.length];
if (q[0].equals("-1")){
break;
}
ArrayList<Integer> num = new ArrayList<>();
for (int i =0;i<q.length;i++){
int place = Integer.parseInt(q[i]);
for (int g =0;g<num.size();g++){
if (place>=num.get(g)){
place++;
}
}
ans[place]=i+1;
num.add(place);
Collections.sort(num);
}
for (int i=0;i<ans.length;i++){
System.out.print(ans[i]);
if (i!=ans.length-1){
System.out.print(" ");
}else{
System.out.println("");
}
}
}
}
}
 
ZeroJudge Forum