23.连续自然数之和表示式问题

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

输入描述
一个目标整数t  1<= t <=1000

输出描述
1.该整数的所有表达式和表达式的个数,如果有多种表达式,自然数个数最少的表达式优先输出
2.每个表达式中按自然数递增输出

具体的格式参见样例,在每个测试数据结束时,输出一行"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

 

查看代码

import java.util.*;

public class Demo23 {
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        int t = Integer.parseInt(sc.nextLine());
        System.out.println("t=" + t);
        int count = 1;

        ArrayList<String> list = new ArrayList<>();
        for(int i = 1; i < t; i++){ //从每一个数开始探索
            int sum = 0;
            StringBuilder sb = new StringBuilder();
            String res = "";
            for(int j = i; sum <= t; j++){  //单个数的探索过程
                if(sum < t){
                    sum += j;
                    sb.append(j).append("+");
                }else{
                    res = sb.toString().substring(0, sb.length() - 1);
                    list.add("t=" + res);
                    count++;
                    break;
                }
            }
        }

        list.sort(new Comparator<String>() {
            @Override
            public int compare(String o1, String o2) {
                return o1.length() - o2.length();
            }
        });
        for(String s : list)
            System.out.println(s);
        System.out.println("Result:" + count);
    }
}

 

总结:for(int j = i;  sum <= t;  j++){ } 不是很习惯这种方式吧,以前还是太局限。

 

posted @ 2022-03-26 14:39  Jukim  阅读(710)  评论(0编辑  收藏  举报