首页 > 试题广场 >

多多的数字组合

[编程题]多多的数字组合
  • 热度指数:8627 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解
多多君最近在研究某种数字组合:
定义为:每个数字的十进制表示中(0~9),每个数位各不相同且各个数位之和等于N。
满足条件的数字可能很多,找到其中的最小值即可。
多多君还有很多研究课题,于是多多君找到了你--未来的计算机科学家寻求帮助。

数据范围:
进阶:空间复杂度 ,时间复杂度

输入描述:
共一行,一个正整数N,如题意所示,表示组合中数字不同数位之和。
(1 <= N <= 1,000)


输出描述:
共一行,一个整数,表示该组合中的最小值。
如果组合中没有任何符合条件的数字,那么输出-1即可。
示例1

输入

5

输出

5

说明

符合条件的数字有:5,14,23,32,41
其中最小值为5
示例2

输入

12

输出

39

说明


示例3

输入

50

输出

-1

说明

没有符合条件的数字 (T▽T) 
import java.util.Scanner;

// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int N=in.nextInt();
        if(N<10){
            System.out.println(N);
        }
        else if(N>45){
            System.out.println(-1);
        }
        else{
            int ans=0;
            int digit=0;
            for(int i=9;i>0;i--){
                if(i<=N){
                    N-=i;
                    ans+=(int)Math.pow(10,digit)*i;
                    digit++;
                }
                else{
                    ans+=(int)Math.pow(10,digit)*N;
                    break;
                }
            }
            System.out.println(ans);
        }
    }
}

发表于 2024-04-09 11:30:55 回复(0)
用递归的方法尝试解决
import java.util.Scanner;
import java.lang.String;

public class Main {
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Scanner scanner = new Scanner(System.in);
        int N = scanner.nextInt();
		System.out.println(getToSumMinNumber(N));
	}
	
	public static int getToSumMinNumber(int input) {
		int sum = 0;
		if(input >= 0 && input < 1000) {
			String temp = String.valueOf(input);
			if(temp.length() == 1) {
				return input;
			}else if(input > 45) {
				return -1;
			}else {
				StringBuffer sb = new StringBuffer();
				getNum(input,9,sb);
				return Integer.valueOf(sb.toString());
			}
		}
		
		return -1;
	}
	
	public static void getNum(int input,int max,StringBuffer sb) {
		String temp = String.valueOf(input);
		if(temp.length() == 1 && input <= max) {
			sb.append(temp);
		}else {
			getNum(input-max,max-1,sb);
			sb.append(max);
		}
	}
}


发表于 2022-03-06 10:17:26 回复(0)