連続整数の合計が1000であるグループの数(1000は任意に設定可能)
VC 6.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
", 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)
{
sum = 0;
num_cnt++;
if (start_pos_flag == 0)
{
printf("%d\t", num_cnt);
for (show_i = 1; show_i <= div_base ; show_i++)
printf("%d\t", show_i);
printf("
");
continue;
}
else
{
printf("%d\t", num_cnt);
for (show_i = 1; show_i <= div_base ; show_i++)
printf("%d\t", i - div_base / 2 + show_i - 1);
printf("
");
continue;
}
}
sum = 0;
j = 1;
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;
j++;
}
}
if (sum == TAG_NUM)
{
sum = 0;
num_cnt++;
if (start_pos_flag == 0)
{
printf("%d\t", num_cnt);
for (show_i = 1; show_i <= div_base ; show_i++)
printf("%d\t", show_i);
printf("
");
continue;
}
else
{
printf("%d\t", num_cnt);
for (show_i = 1; show_i <= div_base ; show_i++)
printf("%d\t", i - div_base / 2 + show_i);
printf("
");
continue;
}
}
}
}
return 0;
}