CCP-CSP 數字排序 JAVA
阿新 • • 發佈:2019-01-04
問題描述
試題編號: | 201503-2 |
試題名稱: | 數字排序 |
時間限制: | 1.0s |
記憶體限制: | 256.0MB |
問題描述: |
問題描述 給定n個整數,請統計出每個整數出現的次數,按出現次數從多到少的順序輸出。 輸入格式 輸入的第一行包含一個整數n,表示給定數字的個數。 輸出格式 輸出多行,每行包含兩個整數,分別表示一個給定的整數和它出現的次數。按出現次數遞減的順序輸出。如果兩個整數出現的次數一樣多,則先輸出值較小的,然後輸出值較大的。 樣例輸入 12 樣例輸出 3 4 評測用例規模與約定 1 ≤ n ≤ 1000,給出的數都是不超過1000的非負整數。 |
答題欄
import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner s = new Scanner(System.in); int N = s.nextInt(); //定義二維陣列、第0行存輸入資料,第1行存數出現的次數 int[][] value = new int[2][N]; int i, j, counter=0; //讀資料到陣列value[][] for(i=0; i<N; i++) { value[0][counter] = s.nextInt(); value[1][counter] = 1; counter++; //迴圈判斷,陣列中是否已有輸入的資料,有,該數的出現次數加一。 //並將counter-1為了是下一輸入的資料覆蓋,剛才輸入的重複資料。 //若陣列中沒有剛輸入的資料,進行到下一輪迴圈。 for(j=0; j<counter-1; j++) { if(value[0][j]==value[0][counter-1]) { value[1][j]++; counter--; } } } sort(value, counter); for(i=0; i<counter; i++) { System.out.printf("%d %d", value[0][i], value[1][i]); System.out.printf("\n"); } } //插入排序 public static void sort(int[][] v, int N) { int in, out, temp0,temp1; for(out=1; out<N; out++) { temp0 = v[0][out]; temp1 = v[1][out]; in = out; //while條件表示式:當前一個數出現的次數小於後一個數出現的次數或者 //出現次數相同,但前一個數大於後一個數 //滿足這兩種情況,前數向後移 while((in>0&&v[1][in-1]<temp1)||in>0&&v[1][in-1]==temp1&&v[0][in-1]>temp0) { v[0][in] = v[0][in-1]; v[1][in] = v[1][in-1]; --in; } v[0][in] = temp0; v[1][in] = temp1; } } }