解题思路:
1.给数列2 4 6 8 10 12...限定一个长度n;

2.每m个数求出平均值且输出;

3.但是求到后面,剩余的数列长度不足m的以实际长度求和输出平均值;

转化为代码思路:

1.定义一个n1=0,表示求到数列中的哪一个数,当n1==n时结束循环;

(n1定义为从0开始,会很方便,具体得写了才能体会)

2.定义a=0,表示数列中的每一个数,(要让a从2开始也行,但是程序求和实现过程复杂麻烦)

3.定义sum,表示m个数的和;

4.当n-n1>=m(表示剩余的数列长度大于m,可以求出m个数的平均值)

   在求m个数的和时,每加上一个数n1++,a+=2;

注意:

1.多组测试数据注意以文件末尾结束

2.最后的m个数(或小于m)的和的平均值,需要换行;

3.每次求和都要把sum置0

参考代码:

#include <stdio.h>
int function( int n, int m );

int main()
{
    int n, m;
    while ( (scanf( "%d%d", &n, &m ) ) != EOF )//以文件末尾结束
        function( n, m );      

    return(0);
}

/*------------------------------------------------*/
int function( int n, int m )
{
    int    n1    = 0, sum = 0;    //定义n1表示加到第几个数(起始为0表示没开始加),sum表示和
    int    a    = 0;             //数列的第一个元素,以0开始,这样下面程序好写
    while ( n1 < n )
    {
        if ( (n - n1) >= m )     //看剩余的数列长度是否大于m
        {
            sum = 0;               //把和置0
            for ( int i = 0; i < m; i++ )  //求m个数的和
            {
                a    += 2;         //依次加2,变为数列中的每一个数
                sum    += a;      //求和 
                n1++;              //记录加到第几个数
            }
            printf( "%d ", sum / m );  //输出平均值
        }else                          
             
             { //剩余数列长度不大于m,按实际长度求
                sum = 0; int t = n - n1;    //t表示剩余数列的长度          
                 for ( int j = 0; j < t; j++ )    //循环求和
                    {
                       a    += 2;
                       sum    += a;
                       n1++;                    //记录加到第几个数
                    }
                printf( "%d \n", sum / t );    //输出平均值,带换行
             }
    }
}

别忘点赞排-.-

点赞(46)
 

0.0分

11 人评分

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 4 条评论

Rin 1年前 回复TA
大佬们我这哪错了
#include <stdio.h>
int main()
{
	int n,m,temp;
	while(scanf("%d %d",&n,&m)!=EOF)
	{
		int a[n],i,j;
		a[0]=2;
		for (i=1;i<n;i++)
		{
			a[i]=a[i-1]+2;
		}
		if (n%m==0)
		{
			for (i=0;i<n;i+=m)
			{
				printf("%d",(a[i]+a[i+m-1])/2);
				if (i!=n-m)
				   printf(" ");
			}
			
		}
		else
		{
			temp=n%m;
			for (i=0;i<n-temp;i+=m)
			{
				   printf("%d ",(a[i]+a[i+m-1])/2);
			}
			printf("%d",(a[i]+a[n-1])/2);
		}
	}
	return 0;
}
zhen6 4年前 回复TA
所以说这个题目不在乎回车?
我来啦 5年前 回复TA
宇神 5年前 回复TA
function应为void函数