这道题,好像是找通项公式样的,不过比较麻烦>_< 用了一堆变量,出这题的真是闲着没事干呀。。。。
【题目】
求下述3个序列的累加和(每一序列各累加n项,正整数n通过cin从键盘输入)。
【提示】
书上的提示大概是说出了求和的规律,大家应该都看得出来吧~?我就不打了>_<打字很麻烦的
【代码】
/************
* 2013.10.23
* P49 自立题17
* 算序列和
************/
#include <iostream>
#include <windows.h>
using namespace std;
int main()
{
void Calc(int, double&, double&, double&);
int n;
double ans1=0, ans2=0, ans3=0;
cout<<"Positive integer n=?";
cin>>n;
Calc(n, ans1, ans2, ans3);
cout<<"s1="<<ans1<<endl;
cout<<"s2="<<ans2<<endl;
cout<<"s3="<<ans3<<endl;
return 0;
}
void Calc(int n, double &ans1, double &ans2, double &ans3)
{
int i, j;
double Down_Left_2 = 1, Down_Left_1 = 2, Temp_Down, S2_Up = 2, S3_Down = 0;
for(i=1;i<=n;i++)
{
//===========s1=========
if(i % 2 == 0)
{
ans1 += ((i / 2) / (3.0 * (i / 2) + 1));
}else{
ans1 += (i / (5.0 + 6 * (i / 2)));
}
//===========s2=========
S2_Up += (i - 1);
switch (i)
{
case 1:
{
ans2 += (S2_Up / Down_Left_2);
break;
}
case 2:
{
ans2 += (S2_Up / Down_Left_1);
break;
}
default:
{
ans2 += (S2_Up / (Down_Left_1 + Down_Left_2));
Temp_Down = Down_Left_1;
Down_Left_1 += Down_Left_2;
Down_Left_2 = Temp_Down;
}
}
//==============S3============
S3_Down = 0;
for(j=1;j<=i;j++)
{
S3_Down +=(3 * j - 2);
}
if(i % 2 == 0)
{
ans3 -= ((2 * i - 1) / (S3_Down));
}else{
ans3 += ((2 * i - 1) / (S3_Down));
}
}
}
/*********
* 7sDream
* 19:54
*********/
【结果】
恩,这题就是找规律和按照规律写代码有点绕,而且要注意累加和的变量类型,然后就是两个整数型相除得数还是整数型。。。所以必要的时候要加“.0”