PAT-乙-1049 1049 数列的片段和 (20 分)

在这里插入图片描述

代码

#include <iostream>

using namespace std;

int main() {

	int n;
	scanf("%d", &n);
	
	double num[n];
	for(int i=0; i<n; i++){
		scanf("%lf", &num[i]);
	}

	double w[n];
	for(int i=0; i<n; i++){ 
		w[i] = (double)(i+1) * (n-i);
	}
	
	double ans = 0;
	for(int i=0; i<n; i++){
		ans += num[i]*w[i];
	}
	printf("%.2lf\n", ans);

	return 0;
}

注解

1、关键是这句:w[i] = (double)(i+1) * (n-i);
必须要先转换成double类型,否则会因为(i+1) * (n-i)太大,超过了int类型而溢出!就会有案例是Wrong Answer。
2、找规律同样很重要,此题能找出来(i+1) * (n-i)这个式子是解题的关键。
例如长度是4,次数就分别是14, 23, 32, 41。这样类似的规律,第一个数字每次递增1,第二个数字每次递减1,二者相乘就是最终的答案。
关于这个式子如何推出来的?建议多试一试,拿n=2,n=3,n=4,n=5手动试一下就有感觉了。

结果

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/zhanggirlzhangboy/article/details/82960825
今日推荐