用连续自然数之和来表达整数
题目描述
一个整数可以由连续的自然数之和来表示给定一个整数,计算该整数有几种连续自然数之和的表达式,且打印出每种表达式
输入描述
一个目标整数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);
}
}