整数拆分为连续自然数之和
一个整数可以由连续的自然数之和来表示 给定一个整数
计算该整数有几种连续自然数之和的表达式
并打印出每一种表达式
输入描述
一个目标整数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
/* 整数拆分为连续自然数之和,等差数列求和公式。
* an = a1 + (n-1)*d;
* sn = (a1 + an)*n/2 = n*(a1 + a1 + (n - 1) * d) / 2 = n * a1 + n*(n-1)*d/2;
* sn * 2 = 2 * n*a1 + n * (n - 1) * 1;
*/
#include <stdio.h>
int main()
{
int sn;
int a1, n;
int i, cnt = 0; /* 总共几组 */
while(scanf("%d", &sn) != EOF) {
for (a1 = 1; a1 <= sn; a1++) {
for (n = 1; n < sn; n++) {
if (sn * 2 == (2 * n * a1 + n * (n - 1))) {
for (i = 0; i < n; i++) {
printf("%d ", a1 + i);
}
printf("\n");
cnt++;
}
}
}
printf("Result:%d",cnt);
}
return 0;
}
}
上海得物信息集团有限公司公司福利 1263人发布