刪數最小值問題(Java實現)——貪心演算法
阿新 • • 發佈:2018-12-19
刪數最小值問題——貪心演算法
【問題描述】
給定一個 n 位正整數 a , 去掉其中 k<=n 個數字後按原左右次序將組成一個新的正整數。對給定的 a , k 尋找一種方案,使得剩下的數字組成的新數最小。
程式原始碼:
package SF; import java.util.*; public class 刪數最小值問題 { public static void main(String[] args) { Scanner reader = new Scanner(System.in); System.out.println("請輸入正整數a的位數n:"); int n = reader.nextInt(); int[] a = new int[n]; //正整數a for(int i=0;i<n;i++){ //物品重量取隨機數1~9 a[i] = ((int) Math.floor(Math.random()*9)+1); } System.out.println("獲取隨機的正整數a為:"); for(int i=0;i<n;i++){ System.out.print(a[i]); } System.out.println(""); System.out.println("請輸入正整數k(k<=n):"); int k = reader.nextInt(); 刪數最小值問題 p = new 刪數最小值問題(); for(int i=0;i<k;i++){ p.del(a, k, n); } p.min(a, k, n); } void min(int[] a,int k,int n){ int q; int o = 0; int[] s = new int[n-k]; for(int i=0;i<n;i++){ if(a[i]!=0){ s[o] = a[i]; o++; } } Arrays.sort(s); System.out.println("得到的剩餘數為:"); for(int i=0;i<(n-k);i++){ System.out.print(s[i]); } } void del(int[] a,int k,int n){ int m; m = ((int)Math.floor(Math.random()*(n-1))+1); //不取0號位 if(a[m]!=0){ a[m] = 0; }else{ del(a, k, n); } } }
執行截圖: