题意:
给出m和s找到位数为m各位上数字和为s的最大数和最小数,不要前导0,如果找不到输出-1.
1<=m<=100,0<=s<=300.
思路:贪心。当m*9<s时我们找不到最大值,当m>1&&s==0的时候我们找不到最小值,其他情况我们都可以找到最值。为保证值最大,我们尽量把9放在前面。为了保证值最小,我们尽量把9放在后面。首位不小于1。需要特判m == 1&&s == 0的时候。
import java.util.Scanner;
public class Main{
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
int m = sc.nextInt();
int s = sc.nextInt();
int[] max1 = new int[m+5];
int[] min1 = new int[m+5];
if(m*9<s||m>1&&s==0) System.out.print("-1 -1");
else if(m==1&&s==0) System.out.print("0 0");
else{
int temp = s;
for(int i=0;i<m;i++){
if(temp>9) {
max1[i] = 9;
temp -= 9;
}else if(temp>0){
max1[i] = temp;
temp = 0;
}else{
max1[i] = 0;
}
}
temp = s - 1;
for(int i=m-1;i>=0;i--){
if(temp>9){
min1[i] = 9;
temp -= 9;
}else if(temp>0){
min1[i] = temp;
temp = 0;
}else{
min1[i] = 0;
}
}
min1[0] += 1;
for(int i=0;i<m;i++) System.out.print(min1[i]);
System.out.print(" ");
for(int i=0;i<m;i++) System.out.print(max1[i]);
}
}
}