我也要努力才行
程序代码:/*
从循环到穷举
练习题:哪些连续的自然数的和为1000
*/
/*
思考:
连续的自然数相加等于1000 : x + (x + 1) + (x + 2) + (x + 3) + (x + 4) + ... ... + (x + n) == 1000
假设5个数相加等于1000: 5 * x + 1 + 2 + 3 + 4 = 1000
推导出n个数相加等于1000: n * x + 1 + 2 + 3 + 4 + ... + (n - 1) = 1000
x = 1000 - ( 1 + 2 + 3 + ... + n-1) / n
n = 1000 - ( 1 + 2 + 3 + ... + n -1) / x
假设题目的连续的自然数是指1个以上的数字,由于 500 + 501 > 1000 ,
所以 x < 500
for(x = 0; x < 500; x++)
for(n = 2; n <= 1000 - ( 1 + 2 + 3 + n - 1) / x; n++)
if(n = 1000 - (1 + 2 + 3 +...+ n - 1) / x
for(i = n; i >= 0; i--)
printf x;
x++;
*/
#include <stdio.h>
#define YQ 1000 //一千
#define WB 500 //第一个数字的最大上限
#define WS 50 //连续自然数的个数上限
int main(void)
{
unsigned first, sum; //起始数字和数字个数
unsigned tmp; //临时记录 n 个连续自然数的和
short i; //循环变量
for (first = 1; first < WB; first++) //从 1 到 500 查找连续自然数的第一个数
{
for (sum = 2; sum < WS; sum++) //从 2 个数开始查找共有几个连续数相加等于1000
{
tmp = 0; //清除上一次循环(1 + 2 + 3 + ... + n-1) 的值
for(i = 0; i < sum; i++) //计算(1 + 2 + 3 + ... + n-1)
tmp += i;
if((YQ - tmp) / first == sum && (YQ - tmp) % first == 0) //判断(1000 - (1+2+3+4+...+n-1)/first)的值
{
for(i = 1; i <= sum; i++) //打印符合条件的连续自然数
{
printf("%u ", first);
first++;
}
printf("\n");
}
}
}
return 0;
}










感觉老师都没怎么讲的,也罢也罢,我会努力学的