首页 > ACM题库 > HDU-杭电 > hdu 2015 偶数求和[解题报告]C++
2013
12-26

hdu 2015 偶数求和[解题报告]C++

偶数求和

问题描述 :

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

输入:

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

输出:

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

样例输入:

3 2
4 2

样例输出:

3 6
3 7

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2040。

水题。

CODE:

 

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
using namespace std;

const int maxn = 102;

int save[maxn] = {0};

void init()
{
    int cnt = 1;
    for(int i = 1; i <= 100 ;i++)
    {
        save[cnt++] = i*2;
    }
    return ;
}

int main()
{
    int n , m , index;
    init();
    while(~scanf("%d%d", &n ,&m))
    {
        int sum = 0;
        for(int i = 1; i <= n ;i++)
        {
            if(i % m == 0)
            {
                sum += save[i];
                if(i != n)
                {
                    printf("%d ", sum / m);
                }
                else
                {
                    printf("%d\n", sum / m);
                }
                sum = 0;
                index = i;
            }
            else
            {
                sum += save[i];
            }
        }
        if(sum != 0)
        {
            printf("%d\n" , sum / (n - index));
        }
    }
    return 0;

 

解题转自:http://www.cnblogs.com/g0feng/archive/2012/05/22/2513801.html


  1. 可以根据二叉排序树的定义进行严格的排序树创建和后序遍历操作。如果形成的排序树相同,其树的前、中、后序遍历是相同的,但在此处不能使用中序遍历,因为,中序遍历的结果就是排序的结果。经在九度测试,运行时间90ms,比楼主的要快。

  2. #include <cstdio>
    #include <algorithm>

    struct LWPair{
    int l,w;
    };

    int main() {
    //freopen("input.txt","r",stdin);
    const int MAXSIZE=5000, MAXVAL=10000;
    LWPair sticks[MAXSIZE];
    int store[MAXSIZE];
    int ncase, nstick, length,width, tmp, time, i,j;
    if(scanf("%d",&ncase)!=1) return -1;
    while(ncase– && scanf("%d",&nstick)==1) {
    for(i=0;i<nstick;++i) scanf("%d%d",&sticks .l,&sticks .w);
    std::sort(sticks,sticks+nstick,[](const LWPair &lhs, const LWPair &rhs) { return lhs.l>rhs.l || lhs.l==rhs.l && lhs.w>rhs.w; });
    for(time=-1,i=0;i<nstick;++i) {
    tmp=sticks .w;
    for(j=time;j>=0 && store >=tmp;–j) ; // search from right to left
    if(j==time) { store[++time]=tmp; }
    else { store[j+1]=tmp; }
    }
    printf("%dn",time+1);
    }
    return 0;
    }