题目描述
有一个长度为n(n<=100)的数列,该数列定义为从2开始的递增有序偶数(公差为2的等差数列),现在要求你按照顺序每m个数求出一个平均值,如果最后不足m个,则以实际数量求平均值。编程输出该平均值序列。
输入格式
输入数据有多组,每组占一行,包含两个正整数n和m,n和m的含义如上所述。
输出格式
对于每组输入数据,输出一个平均值序列,每组输出占一行
样例输入
3 2
4 2
样例输出
3 6
3 7
代码如下:
注意:
1.多组测试数据注意以文件末尾结束
2.最后的m个数(或小于m)的和的平均值,需要换行;
3.每次求和都要把sum置0
#include<stdio.h> int main() { int n,m,i,j,sum1=0,avg1=0,t=2,sum2=0,avg2=0,s=0; while(scanf("%d%d",&n,&m)!=EOF)//以文件末尾结束 { s=n; //这里标记是因为后面需要计算完之后剩余的数字为多少 for(i=0;i<n/2;i++) { if(s>=m && s>=0) //s要大于m才能筛选出m范围的数字,s>=0这个条件别忘记,否则可能为负数 { for(sum1=0,j=1;j<=m;j++) //把m范围内的数字全加起来 { sum1=sum1+t; t=t+2; //等差数列,公差为2 } avg1=sum1/m; //求其平均 printf("%d ",avg1); //输出平均值 s=s-m; //每次计算完都会少m个数字 } } if(s!=0) //表示还剩下s个数字 { for(i=1;i<=s;i++) //也是把剩下的s全部加起来 { sum2=sum2+t; t=t+2; //这里的t值还是上一循环条件基础上的t值 } avg2=sum2/s; //剩下s个当然就是除以s啦 printf("%d\n",avg2); sum1=avg1=sum2=avg2=0; //这里注意要重新赋值,否则上一个数字测试的数据还会存在 t=2; s=n; } if(s==0) //如果上面不剩数字(例如:4和2),那么我们直接重新赋值,准备下一个输入的计算 { sum1=avg1=sum2=avg2=0; t=2; s=n; } } return 0; }