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
总觉得自己总再用很蠢的方法做题?!
依旧用的是最原始方法……唯一要注意的就是余数为零的时候要另算(OTZ第二天一想突然不清楚到底是不是这样了)……吧?
然后就是逻辑要清晰。
#include<stdio.h>
int main()
{
int n,m;
int i,j,x,b,c,k,sum;
int a[130],avr[199];
while(~scanf("%d%d",&n,&m))
{
a[1]=2;
for(i=2;i<=n+1;i++)
{
a[i]=a[i-1]+2;
}
b=n%m;
c=n/m;
x=m;
if(b!=0)
{
i=1;
for(j=1,k=1;j<=c;j++)
{
sum=0;
for(;i<=x;i++)
{
sum+=a[i];
}
avr[k]=sum/m;
x=x+m;
k++;
}
sum=0;
for(j=1,i=i;j<=b;j++)
{
sum+=a[i];
i++;
}
avr[k]=sum/b;
for(i=1;i<k;i++)
{
printf("%d ",avr[i]);
}
printf("%d\n",avr[i]);
}
else
{
i=1;
for(j=1,k=1;j<=c;j++)
{
sum=0;
for(;i<=x;i++)
{
sum+=a[i];
}
avr[k]=sum/m;
x=x+m;
k++;
}
for(i=1;i<k-1;i++)
{
printf("%d ",avr[i]);
}
printf("%d\n",avr[i]);
}
}
return 0;
}