一、代码如下
//202112-1-序列查询
#include <iostream>
using namespace std;
#define NumFlag 201 //n最大为200
int a[NumFlag];//数组A
int n;//数组个数
int N;//N值
void input(){//输入n、N、数组数据
cin>>n;cin>>N;
for(int i=1;i<=n;i++){
cin>>a[i];
}
}
void output(){//输出数组内容
for(int i=1;i<=n;i++){
cout<<a[i]<<" ";
}
cout<<endl;
}
int sum(){
int x=0;//存储sum(A)值
for(int i=2;i<=n;i++){//小于a[1]的f()值皆为0,所以从i=2开始,(a[2]-a[1])*1
x=x+(a[i]-a[i-1])*(i-1);
}
//上述循环没有计算N大于a[n]的部分,下述操作将其补上
x=x+(N-a[n])*n;
return x;
}
int main(){
input();
//output(); //检验输入是否正确
int a=sum();
cout<<a<<endl;
return 0;
}
二、思路分析
模块一、题目的要求与提示
1、样例计算过程
此题目较长,读完脑壳都懵了,看完题后再认真看懂“ 样例计算过程 ”对理解题意与找寻解题思路有着积极的作用。
2、题目所给的提示
题目所给的这个提示对提升算法效率有着很重要的作用,没注意到这个也因紧张而使用暴力算的话……岂不是嗷呜呜。
3、变量范围
可能算法写对了,但是没注意限界条件也拿不到满分。(这里n一定小于N)
模块二、代码步骤分析
此题关键步骤在于sum(A)的计算,由模块一的读题与分析已大致有了解题思路。
但还需要注意以下细节
1、小于a[1]的f()值皆为0(所以不必算对0的求和),所以从i=2开始
对于i=2时,x=x+(a[2]-a[1])*1 ------个例
对于i时,x=x+(a[i]-a[i-1])*(i-1) ------共性
for(int i=2;i<=n;i++){ x=x+(a[i]-a[i-1])*(i-1); }
2、述循环没有计算N大于a[n]的部分,下述操作将其补上。
x=x+(N-a[n])*n;
此操作结束后x值即为所求。
模块三、结果提交