題目描述:一個正整數有可能可以被表示為n(n>=2)個連續正整數之和,如:
15=1+2+3+4+5
15=4+5+6
15=7+8
請編寫程式,根據輸入的任何一個正整數,找出符合這種要求的所有連續正整數序列。
輸入資料:一個正整數,以命令列參數的形式提供給程式。
輸出資料:在標準輸出上列印出符合題目描述的全部正整數序列,每行一個序列,每個序列都從該序列的最小正整數開始、以從小到大的順序列印。如果
結 果有多個序列,按各序列的最小正整數的大小從小到大列印各序列。此外,序列不允許重複,序列內的整數用一個空格分隔。如果沒有符合要求的序列,輸
出 “NONE”。
本人只搜到第一題可做,其餘幾題需要下載一些檔案,我沒下載到,有興趣的朋友可以給我下,在此先謝謝了。此題所寫程式如下:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void help();
int main(int argc, char* argv[])
{
int sum = 0, x, flag, num;
if(argc == 1 || (strcmp(argv[1], "/?") == 0) || (strcmp(argv[1], "help") == 0))
{
help();
return 0;
}
for(int y = 1; y < argc; y++)
{
flag = 0;
num = atoi(argv[y]);
for(int i = 1; i <= num/2; i++)
{
for(x = i; x <= num/2 + 1; x++)
{
sum += x; //逐漸把連續的數字相加起來
if(sum > num) //如果最終比所給數字大,則跳出重新從下一個起點數字開始計算
{
sum = 0;
break;
}
else if(sum == num) //如果相等,則說明了存在連續的數字,輸出來
{
flag = 1;
printf("/t%d = ", num);
for(int j = i; j <= x; j++)
printf("%d ", j);
sum = 0;
printf("/n");
break;
}
}
}
if(0 == flag)
printf("/t%d NONE/n", num);
printf("/n");
}
return 0;
}
void help()
{
printf("/ticf 的協助文檔/n");
printf("/t/ticf [num] [num].../n");
printf("/t/ticf icf 15 13 10 .../n");
}