洛谷P1147 連續自然數和(方法1 暴力列舉)
阿新 • • 發佈:2018-12-18
題目描述 對一個給定的自然數 M,求出所有的連續的自然數段,這些連續的自然數段中的全部數之和為 M 。
例子: 1998+1999+2000+2001+2002 = 100001998+1999+2000+2001+2002=10000 ,所以從 19981998 到 20022002 的一個自然數段為 M=10000M=10000 的一個解。
輸入輸出格式 輸入格式:
包含一個整數的單獨一行給出M的值( 10 \le M \le 2,000,00010≤M≤2,000,000)
輸出格式:
每行兩個自然數,給出一個滿足條件的連續自然數段中的第一個數和最後一個數,兩數之間用一個空格隔開,所有輸出行的第一個按從小到大的升序排列,對於給定的輸入資料,保證至少有一個解。
輸入輸出樣例 輸入樣例#1: 複製 10000 輸出樣例#1: 複製 18 142 297 328 388 412 1998 2002
#include<cstdio> using namespace std; int main(){ int M; int sum = 0; scanf("%d",&M);//輸入M for(register int i=1;i<=M/2;i++){ //暴力列舉 把1到M/2的例子全都舉出 sum = 0; int last; for(register int j=i;j<=M/2+1;j++){//第二層迴圈 //然後第二層迴圈列舉接下來的數字,sum累加 last=j; sum+=j; if(sum>=M)break;//如果大於就退出 }//小於的話就一直迴圈 if(sum==M)//如果等於就輸出 printf("%d %d\n",i,last);//最後的輸出 } return 0; } //時間複雜度為O(N^2)
//暴力列舉方法