【acm1796】 偶数求和

***题目:
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的时候,要对最后一组进行单独求平均值。这一题还有一点比较难得就是如何去定位到最后一组的位置,读者可以多试一下代入一些特殊值试一下。

发布了42 篇原创文章 · 获赞 18 · 访问量 406

猜你喜欢

转载自blog.csdn.net/weixin_42918559/article/details/104041149