华为OD机试(2021-04)题目一

题目:

一个 0-1000 的整数,拆解为一个(本身)或多个连续自然数的和,按照自然数的个数从少到多输出各个方案 input = solution,方案内的自然数按照从小到大排列

public static void main(String[] args) {
          
   
        Scanner input = new Scanner(System.in);
        int x = input.nextInt();
        if (x <= 1000 && x >= 0){
          
   
            if (x == 0){
          
   
                System.out.println(0);
            }else if (x == 1){
          
   
                System.out.println(x);
                System.out.println(0+" "+1);
            }else {
          
   
                System.out.println(x);
                for (int i = x; i >=0; i--){
          
   
                    int sum = i;
                    for (int j = i - 1; j >= 0; j--){
          
   
                        if (sum + j == x){
          
   
                            for (int f = j; f < i; f++){
          
   
                                System.out.print(f+" ");
                            }
                            System.out.println(i);
                            sum = sum + j;
                        }else {
          
   
                            sum = sum + j;
                        }
                    }
                }
            }
        }
    }
经验分享 程序员 微信小程序 职场和发展