原题链接:[编程入门]有规律的数列求和
解题思路:
观察数列,除了第一个数,之后每个数的分母都是前一个数的分子,分子是前一个数的分子分母之和。看清楚规律就好写了。
注意事项:
回头看看1015: [编程入门]求和训练(链接:https://blog.dotcpp.com/a/84306)。那一题中也要求是保留两位小数,而且是在参数传递的过程中就开始保留。本题我一开始写的是(float)(numerator / denominator),然而发现每次结果都是1.00,原来是我对强制类型转换的优先级的理解出了问题。
(1)(float)(num)意思是把num的类型转换成float,顺序是先计算num,如果这个num是两个整型做除法,那就是先算出int的结果,再转成float。在本题中,我定义的numerator和denominator都是short型的,所以会先算出两个short变量的商,再转成float,所以是1.00。
(2)(float)num意思是输出浮点型的num,是(float)在先,反之如果(num)则计算num在先。可以试着编译执行一下这行代码:
cout << fixed << setprecision(2) << (float)(1 / 2) << " " << (float)1 / 2 << endl;
也许会有更好的理解。
参考代码:
#include #include using namespace std; float seqSum(short n); //有规律数列求和 int main() { short N = 0; cin >> N; cout << fixed << setprecision(2) << seqSum(N) << endl; return 0; } float seqSum(short n) { float res = 0; //求和 short numerator = 2; //分子,初始为2 short denominator = 1; //分母,初始为1 for (short i = 0; i < n; i++) { res += (float)numerator / denominator; //注意和(float)(numerator / denominator)的区别 short tempDen = denominator; //分母的副本 denominator = numerator; //数列下一个数的分母是上一个数的分子 numerator += tempDen; //数列下一个数的分子是上一个数的分子和分母之和 } return res; }
0.0分
3 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复