P - 偶数求和
HDU - 2015
有一个长度为n(n<=100)的数列,该数列定义为从2开始的递增有序偶数,现在要求你按照顺序每m个数求出一个平均值,如果最后不足m个,则以实际数量求平均值。编程输出该平均值序列。
3 2 4 2
3 6 3 7
第一次尝试:
#include <stdio.h>
int main ()
{
int n,m;
while(scanf("%d",&n)!=EOF)
{
int s[100];
float c[100];
s[0]=2;
for(int i=1;i<n;i++)
{
s[i]=s[i-1]+2;
}
for(int j=0;j+m-1<n;j+=m)
{
float sum=0;
for(int q=0;q<m;q++)
{
sum+=s[j+q]
}
c[j]=sum/m;
}
}
}
无法得到正确结果!且无法输出。。
第二次尝试:
# include <stdio.h>
int main()
{
int n,m;
while (scanf("%d%d",&n,&m)!=EOF)
{
int i,a=0,sum=0,count=0;
for(i=1;i<=n;i++)
{
a+=2;
count++;
sum+=a;
if(count==m)
{
printf("%d",sum/m);
count=0;
sum=0;
}
else if(i==n)
{
printf("%d",sum/count);
}
}
printf("\n");
}
return 0;
}
结果数值正确,但是PE了。。。
从题目可以看出,这里输出结果的最后一位是没有空格的,所以应当多注意!
把i==n的优先级提高,将这个语句放到前面去,在i==n时,首先满足,输出不带空格的数值,同时换行(无需在最后再加\n)!
正确代码:
# include <stdio.h>
int main()
{
int n,m;
while (scanf("%d%d",&n,&m)!=EOF)
{
int i,a=0,sum=0,count=0;
for(i=1;i<=n;i++)
{
a+=2;
count++;
sum+=a;
if(i==n)
{
printf("%d\n",sum/count);
}
else if(count==m)
{
printf("%d ",sum/m);
count=0;
sum=0;
}
}
}
return 0;
}