杭电oj 2015 偶数求和
发布日期:2021-05-08 01:30:25 浏览次数:14 分类:精选文章

本文共 1397 字,大约阅读时间需要 4 分钟。

题目:

有一个长度为n(n<=100)的数列,该数列定义为从2开始的递增有序偶数,现在要求你按照顺序每m个数求出一个平均值,如果最后不足m个,则以实际数量求平均值。编程输出该平均值序列。

Input

输入数据有多组,每组占一行,包含两个正整数n和m,n和m的含义如上所述。

Output

对于每组输入数据,输出一个平均值序列,每组输出占一行。

Sample Input

3 2
4 2

Sample Output

3 6
3 7

Author

lcy

方法一(比较繁琐,变量过多,过程不够简洁):

思路:先将n个递增的数储存在数组arr[ ]中,再求每m个数的和,再输出平均值。而如果n%m不为零,再另行计算最后不足m个数的平均值。

#include
void main(){ int n,m,i,k,j,erwai,he; int arr[100]={ 0.0}; while(~scanf("%d %d",&n,&m)) { arr[0]=2; k=0; //用k表示第几个数组元素 erwai=0; for(i=1;i

方法二:

思路:该题不用数组储存数列,而是当an随着循环不断叠加时,求取每个an的和(he),每满m个数便输出平均值并清零he。

#include
void main(){ int n,m,i,he,an; while(~scanf("%d %d",&n,&m)) { an=0; he=0; for(i=1;i<=n;i++) { an+=2; he=he+an; if(i%m==0) //每满m个数输出一次平均值 { if(i==m) printf("%d",he/m); else printf(" %d",he/m); he=0; //每输出一次平均值 就清零每m项的和 } } if(he!=0) //如果和不为零,意味着需要额外考虑不足m个数的情况 printf(" %d",he/(n%m)); // n%m表示最后剩余几个数 printf("\n"); }}

方法三:

思路:该题借等差数列前n项和公式,求得首项、公差皆为2的数列的Sn=n*(n+1),则可用Sn-Sn-m依次求得每m个数的和,再输出平均值,而不足m个数的,可用Sn-Sn-n%m求得。

#include
void main(){ int n,m,he=0,i; while(~scanf("%d %d",&n,&m)) { for(i=1;i<=n;i++) { if(i%m==0) { he=i*(i+1)-(i-m)*(i-m+1); //利用等差数列求和公式 if(i==m) printf("%d",he/m); else printf(" %d",he/m); } } if(n%m!=0) //不足m个数的情况 { he=n*(n+1)-(n-n%m)*(n-n%m+1); printf(" %d",he/(n%m)); } printf("\n"); }}
上一篇:杭电oj 2020 绝对值排序 (Java)(注意换行符在oj上的特别要求)
下一篇:杭电 2007 平方和与立方和(输入数据的大小顺序并不能默认)

发表评论

最新留言

很好
[***.229.124.182]2025年04月04日 17时20分25秒