给定正整数N和集合K,求不大于N的,且每一位数字都在K中的最大值M,比如N=297,K={2,5,8},则返回288
程序员文章站
2022-03-21 23:19:09
...
思想:从高到低位开始排,在序列中找遇到有相等的,就加到M*10(往左移一位)中,一直进行这样的循环;直到没有相等的,就取当前位的前一位,自此之后的所有位数都取数组K中最大的数。
代码:
import java.util.Arrays;
import java.util.Scanner;
public class MaxM {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int N = in.nextInt();
int[] K = {2,5,8};
Arrays.sort(K);
int M = 0;
int flag=0;
String sn = N+"";
for(int i=0;i<sn.length();i++){
int n = (int)sn.charAt(i)-48;
for(int j=0;j<K.length;){
if(n>K[j]){
j++;
}else if(n==K[j]){
M = M*10 + n;
break;
}else{
flag = 1;//当遇到没有相等的时候,设flag=1
M = M*10 + K[j];
break;
}
}
while(flag == 1 && i++<sn.length()){//flag为1时,对其后所有的位都取集合中最大的数
M = M*10 + K[K.length-1];
}
}
System.out.println(M);
}
}