整数拆分为连续自然数之和

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

}

全部评论

相关推荐

ldyllic:飞神,985+美团+腾讯+京东,无敌飞飞神
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务