Erase


私信TA

用户名:H2030819010

访问量:6770

签 名:

等  级
排  名 114
经  验 7927
参赛次数 17
文章发表 13
年  龄 1
在职情况 学生
学  校 贺州学院
专  业

  自我简介:

TA的其他文章

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

        列举一个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分

7 人评分

  评论区

  • «
  • »