【JZOJ】【暴力】連續自然數和

題意

求和爲mm的連續自然數列,輸出所有符合條件的數列的首項和末項

樣例

輸入

10000

輸出

18 142
297 328
388 412
1998 2002

思路

直接暴力,首先先用一個i用來枚舉首項

∵這個數列是一個等差數列求等差數列的和公式爲=(首項加末項)*項數/2=和

∴(首項+末項)項數=m/2

∴i只需要枚舉到m/2就可以了
然後循環裏面再套一個循環(j),用來枚舉每一項,然後用一個數一直加(就等於乘項數了),只要這個數超出或等於m,我們就可以退出了,最後再判斷和是否等於m,若等於,直接可以輸出首項和末項了

代碼

#include<cstdio>
#include<iostream>
using namespace std;
int main()
{ 
	freopen("combo.in","r",stdin);
	freopen("combo.out","w",stdout);
	int m; scanf("%d",&m);
	for (int i = 1; i <= m/2; ++i) {//枚舉首項
		int sum = 0,j;
		for (j = i; j < m; ++j)//枚舉項
		 {
		 	sum += j;
		 	if (sum >= m) break;
		 }
		if (sum == m) printf("%d %d\n",i,j);//判斷
	}		
	return 0;
} 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章