1049 数列的片段和 C++

本文解析了统计所有片段和的高效算法,介绍了如何通过计算元素在各片段中出现次数来得出片段和,强调了数据类型统一的重要性,并提供了示例代码。

在这里插入图片描述
思路解析:
由于本题是统计所有片段和,所以从整体比从局部分析更便捷。
片段和等于各元素在各片段里出现次数与它本身之积的和。

设第i个数为要统计的元素为a,则以a为尾的片段共有i种,即:1 2…i、2 3…i、3 4…i、i,以a为头的片段共有n-i+1种,即:i i+1…n、i+1 i+2…n、n。
所有包含元素a的片段共有i*(n-i+1)种。所以所有元素a的和为ai(n-i+1)。

另外值得注意的是,对于混合类型的数据运算,最好要手动统一为同一类型,例如本题,a* i (n-i+1)和i(n-i+1)a的运算结果是不同的,前者的精度更高。如果要将后者的精度提升必须手动的将前部分转换为double类型,即(double)i(n-i+1)*a

示例代码:

#include<iostream>
#include<iomanip>
using namespace std;
int main() {
	int num; cin >> num;
	double res=0;
	for (int i = 1; i <= num; i++) {
		double temp; cin >> temp;
		res += temp*(num - i + 1)*i;
	}
	cout <<fixed<<setprecision(2)<<res;
	return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值