HDU--2015

偶数求和

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 56836    Accepted Submission(s): 24787


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
 

Author
lcy

#include <iostream>
#include <stdlib.h>

using namespace std;
 
int main()
{
	int n, m, a[110], num, sum, result, b[110];
	memset(a,0,110);
	memset(b,0,110);
	while (cin >> n>> m)
	{
		sum = 0;
		int flag = 0;
		num = 2;
		for (int i=0; i<n; i++)
		{
			a[i] = num;
			num = num+ 2;
		}
		if (n / m !=0)
		{
			int t = n/m ;
			int k = 0;
			int p = m;
			for ( ; t>0; t--)
			{
				sum = 0;
				for (int j=k;j <p; j++)
				{
					sum = sum + a[j];
				}
				result = sum / m;
				b[flag] = result;
				flag= flag +1;
				k = k+m;
				p = p+m;
			}
			cout << b[0];
			if (flag > 1)
			{
				for (int i=1; i<flag; i++)
				{
					cout <<" "<<b[i];
				}
			}
			if (n%m !=0)
			{
				sum = 0;
				int p= n/m;
				for (int j=p*m; j<n; j++)
				{
					sum = sum +a[j];
				}
				result = sum /(n-p*m);
				cout << " "<< result ;
			}
			cout << endl;
		}
		else
		{
			for (int j=0; j<n; j++)
			{
				sum = sum +a[j];
			}
			result = sum /n;
			cout << result <<endl;
		}
	}
	return 0;
}

这道题把我坑了~最后不足m个则以实际数量求平均值,可是我理解成为了去求所有数的平均值了。然后就是虽然我把这道题目解答出来了 ,但是很明显这道题我的做法有缺陷,如果当n取值超过数组保留范围的时候,我就不能用数组了,再就是代码量明显多了。。借此看了discuss里面觉得比较优秀的一段代码,因此附上如下

#include <stdio.h>

int main()
{
    int n,m;
    while (scanf("%d %d",&n,&m)!=EOF)
    {
        int i,count = 0,tmp = 0,sum = 0;
        for (i=1;i<=n;i++)
        {
            count++; tmp += 2;
            sum += tmp;
            if (i == n)
            {
                printf("%d
",sum / count);
            } 
            else if (count == m)
            {
                printf("%d ",sum / m);
                count = 0; sum =0;
            }
        }
    }
    return 0;
}


原文地址:https://www.cnblogs.com/Tovi/p/6194911.html