题目
描述
现有公式a_1=1,a_i=a_{i-1}+2a
1
=1,a
i
=a
i−1
+2。S_i=a_1+a_2+…+a_iS
i
=a
1
+a
2
+…+a
i
。
现给定一个整数nn, 请求出小于等于n的最大S_iS
i
。
假设n=5,而a_1=1,a_2=3,a_3=5a
1
=1,a
2
=3,a
3
=5,那么
S_1=a_1S
1
=a
1
,即S_1=1S
1
=1
S_2=a1+a2S
2
=a
1
+a
2
,即S_2=1+3=4S
2
=1+3=4
S_3=a_1+a_2+a_3S
3
=a
1
+a
2
+a
3
,即S_3=1+3+5=8S
3
=1+3+5=8
因此小于等于n的最大S
i
为4。
思路
这题其实非常简单,别被题目诱惑了,根本就不用数组。
while(sum<n){
sum=sum+a;
a=a+2;
}//这里求n的最大Si的值
if(sum==n){
cout<<sum;
}
else
cout<<sum-a+2;//判断是否=n
AC代码
#include<iostream>
#include<cmath>
using namespace std;
int main(){
long long n,sum=0,a=1;
cin>>n;
while(sum<n){
sum=sum+a;
a=a+2;
}
if(sum==n){
cout<<sum;
}
else
cout<<sum-a+2;
return 0;
}
有疑问的评论区回复哦。