在VC6.0下测试成功,可以列出连续整数之和1000的所有组合
貌似这个题目是微软面试出的吧,闲得无聊编出来玩玩
1000还可以自己修改,任意值都可以。
#include <STDIO.H>
#define TAG_NUM 50
int main(void)
{
int i, num_cnt = 0, j = 1;
int sum = 0, div_base;
int start_pos_flag, show_i;
for (div_base = 1;
div_base <= TAG_NUM;
div_base++) //连续多少个数组成TAG_NUM
{
i = TAG_NUM / div_base;
j = 1;
sum = 0;
if (i == TAG_NUM) //TAG_NUM本身就满足条件,挑选出来
{
num_cnt++;
printf("%d\t%d\n", num_cnt, i);
}
else
{
while (j <= div_base) //循环div_base次,找到连续的div_base个数之和为TAG_NUM,此时测试中间数偏左
{
if (i - div_base / 2 <= 1) //左边出界
{
start_pos_flag = 0;
sum += j;
j++;
}
else
{
start_pos_flag = 1;
sum += i - div_base / 2 + j - 1;
j++;
}
}
if (sum == TAG_NUM)
{