杭电oj2015
题目:2015题目
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
Author
lcy
代码:
#include "stdio.h"
//#include "math.h"
int main()
{
int n,i,m;
while(scanf("%d %d",&n,&m)!=EOF)
{
int a[100],temp=0,b=n/m,d=n%m,c;
a[0]=2;
if(n>100)continue;
//for(i=0;i<n;i++)
//{a[i]=x;x+=2;}
if(m>n)
{
for(i=0;i<n;i++)
{
temp+=a[i]/n;
a[i+1]=a[i]+2;
}
printf("%d\n",temp);
}
else
{
for(c=1;c<=b;c++)//分成b个组,每个组有m个元素,再进行赋值求平均值
{
for(i=0;i<m;i++)
{
temp+=a[i]/m;
a[i+1]=a[i]+2;
}
printf("%d",temp);
a[0]=a[i];
temp=0;
if(c<b)printf(" ");
}
if(n%m!=0)//对剩下的数再进行处理
{
int temp2=0;
for(i=0;i<(n%m);i++)
{
temp2+=a[i]/(n%m);
a[i+1]=a[i]+2;
}
printf(" %d",temp2);
}
}
printf("\n");
}
return 0;
}
运行结果:
做这道题的心路历程:
作为一个对C语言了解的并不深的小白,那天晚上面对这道题从初有思路到代码成型足足用了一个多小时。起初是想先赋值完那个长度为100的数组,再在里面分n/m个组,但是一想到要遍历每个第一个元素下标为“i+m*x(x为小组个数)”的小组,就很头疼,分分钟往里面嵌套几个for最后还是搞到崩溃,想了想,算了,还是先不进行数组赋值了,一边分组一边赋值吧,于是就有了上面的代码,当然途中因为某些语句的表达还是参考了别人的做法,但是有一些疑问,别人的做法和题目都没有考虑初始m是否会大于n的问题,但如果代码里事先做了判断也会出现WA,最后代码里还是分了这两条路走。
好了先这样吧,这是一篇小白的不成熟发言。