之前,是想利用高斯公式直接求取(第一項最大為m/2
),但是超時。
再後來,終於找到了關於該題的結題報……
該題被定義為:基礎模擬題。
有題目可看出10000=1998+1999+2000+2001+2002;有五項,中間項為2000。這5項與2000相差:-5/2、-5/2+1、0、5/2-1、5/2; 由此可見當項數為奇時,第一項為:m/i-i/2 最後一項為:m/i+i/2
而當第一項為0時,項數最多,設最後一項為b,則有:(0+b)(b-0+1)=2*m;可得出b+1為項數=sqrt(2*m+0.25)-0.5+1;但是由於計算機語言a/b為其整數部分,則最大項數=1+sqrt((doulbe)1+2*m);
但是當項數為偶數時,m/i得到的是中間兩項的平均值,所以判斷是否有i項連續數相加和為m時,m/i=中間項左邊數,則用if((double)m/i==m/i+0.5) 判斷。奇數就更好判斷了:if(m%i==0) 。而偶數第一項就自然為m/i-i/2+1了、
#include#includeusing namespace std;
int m;
int main()
printf("case %d:\n",++num);
for(long i=m;i>=0;i--)
}
for(long i=1;i
1312 連續自然數和
時間限制 1 s 空間限制 128000 kb 題目等級 gold 題解檢視執行結果 對於乙個自然數m,求出所有的連續的自然數段,使得這些連續自然數段的全部數字和為m.eg 1998 1999 2000 2001 2002 10000,所以從1998到2002的乙個自然數段為m 10000的乙個解。...
問題 1258 連續自然數和
對乙個給定的自然數m,求出所有的連續的自然數段 連續個數大於1 這些連續的自然數段中的全部數之和為m。例子 1998 1999 2000 2001 2002 10000,所以從1998到2002的乙個自然數段為m 10000的乙個解。輸入包含乙個整數的單獨一行給出m的值 10 m 2,000,000...
洛谷1147 連續自然數和
對乙個給定的自然數m,求出所有的連續的自然數段,這些連續的自然數段中的全部數之和為m。例子 1998 1999 2000 2001 2002 10000,所以從1998到2002的乙個自然數段為m 10000的乙個解。輸入輸出格式 輸入格式 包含乙個整數的單獨一行給出m的值 10 m 2,000,0...