***题目:
Problem Description
有一个长度为n(n<=100)的数列,该数列定义为从2开始的递增有序偶数,现在要求你按照顺序每m个数求出一个平均值,如果最后不足m个,则以实际数量求平均值。编程输出该平均值序列。
Input
输入数据有多组,每组占一行,包含两个正整数n和m,n和m的含义如上所述。
Output
对于每组输入数据,输出一个平均值序列,每组输出占一行。
Sample Input
3 2
4 2
Sample Output
3 6
3 7***
代码:
#include<iostream>
using namespace std;
int main(){
int n,m,group;
while(scanf("%d%d",&n,&m)!=EOF){
if(n%m==0) group=n/m;
else group=n/m+1;
for(int i=0;i<group;i++){
int sum=0;
if(n%m==0){
for(int j=1+m*i;j<=m+m*i;j++){
sum+=2*j;
}
if(i!=group-1) cout<<sum/m<<" ";
else cout<<sum/m;
}
else {
if(i!=group-1){
for(int j=1+m*i;j<=m+m*i;j++){
sum+=2*j;
}
cout<<sum/m<<" ";
}
else {
for(int j=m*i+1;j<=m*i+n%m;j++){
sum+=2*j;
}
cout<<sum/(n%m);
}
}
}
cout<<endl;
}
return 0;
}
分析:其实这一题讨论起来还是比较麻烦的,因为要考虑到剩下的几个不能凑齐的一组的平均值。所以这里可以分情况讨论,当n对m求余不等于0的时候,要对最后一组进行单独求平均值。这一题还有一点比较难得就是如何去定位到最后一组的位置,读者可以多试一下代入一些特殊值试一下。