用连续自然数之和来表达整数

题目描述

一个整数可以由连续的自然数之和来表示给定一个整数,计算该整数有几种连续自然数之和的表达式,且打印出每种表达式

输入描述

一个目标整数T(1<=T<=1000)

输出描述

该整数的所有表达式和表达式的个数。如果有多种表达式,输出要求为:

自然数个数最少的表达式优先输出

每个表达式中按自然数递增的顺序输出,具体的格式参见样例。

在每个测试数据结束时,输出一行”Result:X”,其中X是最终的表达式个数

输入
9

输出
9=9
9=4+5
9=2+3+4
Result:3

说明 整数9有三种表达方法:

示例二
输入
10
输出
10=10
10=1+2+3+4
Result:2

/**
 * 用连续自然数之和来表达整数
 */
public class SumOfNaturalNumber {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        int middle = n % 2 == 0 ? n / 2 : n / 2 + 1; // 不需要遍历到底

        List<String> list = new ArrayList<>();
        for (int i = 1; i <= middle; i++) {
            int sum = 0;
            StringBuilder sb = new StringBuilder();
            for (int j = i; sum <= n; j++) {
                if (sum < n) {
                    sum += j;
                    sb.append(j).append("+");
                } else {
                    sb.deleteCharAt(sb.length() - 1);// 删除+号
                    list.add("t=" + sb);
                    break;
                }
            }
        }

        list.sort(Comparator.comparingInt(String::length));
        System.out.println("t=" + n); // n自己
        list.forEach(System.out::println);
        System.out.println(list.size() + 1);
    }
}
posted @ 2024-05-18 22:25  yfhu  阅读(187)  评论(0编辑  收藏  举报