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++){ } 不是很习惯这种方式吧,以前还是太局限。