解题思路:
    大概的解题思路分为两段进行计算:

        列举一个2的等差数列2 4 6 8 10 12 14 16 18

                举例:输入n=9,m=4

                          第一段:那么我们先要计算的是长度为9的数列,分别加了几次的和以及平均值分别是什么?再记录计算完之后还剩下几个?

                                            比如:在这次计算中 2+4+6+8=2010+12+14+16=52 剩下一个18并用一个s来作为标记剩下几个(每计算一组m,就用s-m来记录剩下的数字剩下几个,前提是s=n

                                                                        sum=      20/4=5   和   52/4=13(注意数列是为2的等差数列)

                                                                                即   avg=sum/m

                                第二段:最后再把剩下的数字s全部加起来再除以s就可以得到后面一段的平均数了


                                
注意事项:
                    计算完一组输入的数据之后要把所有的值进行复原!!!否则上一组的数据将会在下一组中出现!!!

            如果你的计算结果不是很正确,你可以多对其他的数据进行测试,比如测试s、t、sum、avg的值,多次测试就能得到想要的结果啦。

参考代码:

#include
int main()
{
int n,m,i,j,sum1=0,avg1=0,t=2,sum2=0,avg2=0,s=0;
while(scanf("%d%d",&n,&m)!=EOF)
{
s=n;    //这里标记是因为后面需要计算完之后剩余的数字为多少
for(i=0;i<n/2;i++)
{
if(s>=m && s>=0)     //s要大于m才能筛选出m范围的数字,s>=0这个条件别忘记,否则可能为负数
{
for(sum1=0,j=1;j<=m;j++)     //把m范围内的数字全加起来
{
sum1=sum1+t; 
t=t+2;    //等差数列,公差为2
}
avg1=sum1/m;     //求其平均
printf("%d ",avg1);     //输出平均值
s=s-m;    //每次计算完都会少m个数字
}
}
if(s!=0)    //表示还剩下s个数字
{
for(i=1;i<=s;i++)    //也是把剩下的s全部加起来
{
sum2=sum2+t;
t=t+2;    //这里的t值还是上一循环条件基础上的t值
}
avg2=sum2/s;    //剩下s个当然就是除以s啦
printf("%d\n",avg2);
sum1=avg1=sum2=avg2=0;    //这里注意要重新赋值,否则上一个数字测试的数据还会存在
t=2;
s=n;
}
if(s==0)    //如果上面不剩数字(例如:4和2),那么我们直接重新赋值,准备下一个输入的计算
{
sum1=avg1=sum2=avg2=0;
t=2;
s=n;
}
}
return 0;
}


点赞(0)
 

0.0分

4 人评分

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

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

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

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

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

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

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

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

评论列表 共有 0 条评论

暂无评论