C语言训练-偶数求和(祝大家新年快乐,万事如意)

题目描述

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

输入

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

输出

对于每组输入数据,输出一个平均值序列,每组输出占一行

样例输入复制

3 2
4 2

样例输出复制

3 6
3 7

(1)首先我们需要知道当n大于等于m的情况,然后考虑n小于m的情况。

(2)定义一个数组来保存这个递增有序偶数列,然后将这个数组不断按m划分,不足m的按实际数量划分。

举一个n为9,m为4的例子来分析这题。

 手绘图,请体谅,电脑不太好做这种图像。

规律已经出来了,直接上代码。

#include <stdio.h>
#include <stdlib.h>
void average(int n,int m)
{
    int data[n],sum=0,ave=0,index=n;
    for(int i=0; i<n; i++)
    {
        data[i]=2+2*i;
    }
    if(n>=m)                                           //如果n大于等于m
    {
        for(int i=m-1; i<n; i=i+m)                    //尾循环
        {
            for(int j=i-(m-1); j<=i; j++)               //头循环
            {
                sum=sum+data[j];                      //元素相加
            }
            ave=sum/m;                                //求平均值
            printf("%d ",ave);
            sum=0;
            if(i+m>n-1)                              //判断下一次循环的尾是否还在数组范围内
            {                                        //如果不在,按实际数量求平均值
                index=i+1;                           //把下一个头赋值为最后一个尾然后加1
            }
        }
        if(index<=n-1)                                //如果这个头加1没有超出数组范围
        {
            for(int i=index; i<n; i++)
            {
                sum=sum+data[i];                      
            }
            ave=sum/(n-index);                        //按实际数量求平均值
            printf("%d ",ave);
        }
        printf("\n");
    }
    else if(n<m)                                     //如果n小于m
    {
        for(int i=0;i<n;i++)
        {
            sum=sum+data[i];
        }
        ave=sum/n;
        printf("%d\n",ave);
    }
}
int main()
{
    int n,m;
    while(scanf("%d %d",&n,&m)!=EOF)
    {
        average(n,m);
    }
    return 0;
}

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值