zoukankan      html  css  js  c++  java
  • hdu 2015 偶数求和(数组,调用函数,c语言)

    hdu 2015 偶数求和

    点击做题网站链接

    题目描述

    Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)

    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

    题目难点

    1. 使用一维数组(其实二维数组做可能简单一些)
    2. 调用函数
    3. 要求输出是一个数字空一个数字,但要注意在第一个数字之前不能输出空格,在最后一个数字之后也不能输出空格。这个在我之前的《hdu 2010 水仙花数(c语言)》中记过笔记,具体可以参考链接https://blog.csdn.net/Sherry_Yue/article/details/83216082

    问题解答

    #include <stdio.h>
    int aver(int[],int,int);//声明调用的求平均数的函数
    
    int main()
    {
        int n,m,a[101];//开一个足够大的数组储存长度为 n,从2开始递增的偶数
        while(scanf("%d",&n)!=EOF)
        {
            scanf("%d",&m);
            for(int i=0,j=2;i<n;i++)//赋值,从2开始递增
            {
                a[i]=j;
                j+=2;//递增的偶数
            }
    
            int b;double ave;
            //这边采用分两部分求平均,第一部分是每m个数求出一个平均值,第二部分是如果最后不足m个,则以实际数量求平均值
            for(b=0;b<n/m;++b)//每数m个数为一组,则求第一部分每组的平均值
            {
                ave=aver(a,b*m,m);//每组长度为 m的数据,它的首下标都是 b*m(穷举法边可以发现规律)
                if(b!=n/m-1) printf("%0.0lf ",ave);//为了控制输出空格的问题
                else printf("%0.0lf",ave);//为了控制输出空格的问题
            }
            if(n-b*m>0)//求第二部分,最后一组数不足m个,则求实际的平均值
            {
                ave=aver(a,b*m,n-b*m);//每组长度为 n-b*m的数据的首下标还是b*m
                printf(" %0.0lf",ave);//注意输出空格的问题
            }
            printf("
    ");//在所有平均值都输出完毕之后再换行
        }
        return 0;
    }
    
    int aver(int a[],int first_index,int len)//第一个参数表示传的是哪个数组,
                    //第二、三个参数表示要从哪个数开始(first_index第一个数的下标)往后的长度为len的一组数
    {
        int sum=0;double ave;//一般定义平均值都是double(怕小数被和谐掉),
        //但这边其实这边题目是若干个偶数求平均,所以不会出现小数,用int没问题
        for(int i=first_index;i<first_index+len;++i)//i从首下标开始数,数len个数
        {
            sum+=a[i];//每数一次就求一次和
        }
        ave=(double)sum/len;//算这组数的平均值
        return ave;//返回算出来的平均值
    }
    
    

    笔记:

    1. 说实话,我想用二维数组a[ ][m]做,那样最开始每组长度为 m便已经确定,只要调用行位移就可以完成
  • 相关阅读:
    [JavaScript] 根据字符串宽度截取字符串
    [JavaScript] 时间戳格式化为yyyy-MM-dd日期
    [JavaScript] 获取昨日前天的日期
    [As3.0] 获取本机信息
    [CSS3] 几种分割线实现方法
    [JS] js 判断用户是否在浏览当前页面
    [JS] 理解jquery的$.extend()、$.fn和$.fn.extend()
    [JS] 屏蔽右键
    [JS] jq绑定事件的参数传递
    [CSS3] 各种角度的三角形绘制
  • 原文地址:https://www.cnblogs.com/yuzilan/p/10626193.html
Copyright © 2011-2022 走看看