删数最小值问题——贪心算法
【问题描述】
给定一个 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);
}
}
}
运行截图: