69,371
社区成员
发帖
与我相关
我的任务
分享
// 说明1. 这道题目是POJ No.2140 Herd Sums,连续自然数的和等于某一个数的,如:
// 输入:15
// 输出:4
// 其组合为:7+8;4+5+6;1+2+3+4+5;
// 说明2.不讨论这道题的求解,只讨论p()函数的实现,此函数来自《短码之美》
#include <stdio.h>
int i, r = 1;
void p(int m , int n)
{
if (m == n)
{
r++;
}
else if (m > n)
{
p(m - n , n + 1);
}
}
int main()
{
int a;
scanf("%d", &a);
for (i = 0; i <= a / 2 + 1; ++i)
{
p(a, i);
}
}
#include <stdio.h>
void p(int m , int n)
{
int sum = 0; //声明一个求和的变量
int i = m; //把初始的计算值保存到一个临时变量中
//判断是否有符合条件的连续数
while (sum < n)
{
sum += i;
i ++;
}
//这里我考虑到了最后一个数不需要加+所以打印到倒数第二个数单独在打印出最后一个数
i --;
if (sum == n){
printf ("一种组合:");
for (; m < i; m ++)
printf ("%d + ",m);
printf ("%d",m);
printf ("\n");
return;
}
else
return;
}
int main()
{
int a;
scanf("%d", &a);
for (int i = 1; i <= a / 2; ++i) //这里我觉得从一开始就可以了 要不然15 = 0 + 1 + 2 + 3 + 4 + 5相当于增加了时间复杂度 还有到的话应该是a/2这个自己想象把
{
p(i, a); //这这里的参数位置我换过了
}
return 0;
}