题目地址:P1147 连续自然数和 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)
复习一下数学知识:
等差数列:指从第二项起,每一项与它的前一项的差等于同一个常数的一种数列。
通项公式:an=a1+(n-1)*d 【末项an 首项a1 公差d 】 (1)
前n项和:Sn=[(a1+an)*n/2]或 Sn=a1*n+[n*(n-1)*d]/2 (2)
由(1)可得项数 n=(an-a1)/d +1
因为题目表明是 连续的自然数段,所以公差d=1。
#include<bits/stdc++.h>
using namespace std;
long long M,a,b,n;//自然数M,首项a,末项b,项数n
int main(){
scanf("%d",&M);
for(a=1;a<=M-1;a++){//因为a为首项,且题目要求为自然数,所以a不能等于b
for(b=a+1;b<=M;b++){
n=(b-a)+1;//注意是末项减前项
if(a*n >= M) break;
if(((a+b)*n/2) == M){
printf("%d ",a);
printf("%d \n",b);
break;
}
}
}
return 0;
}
结果:
小结:数学很重要QAQ
继续努力!!!!!