题目描述
有一个长度为n(n<=100)的数列,该数列定义为从2开始的递增有序偶数(公差为2的等差数列),现在要求你按照顺序每m个数求出一个平均值,如果最后不足m个,则以实际数量求平均值。编程输出该平均值序列。
输入
输入数据有多组,每组占一行,包含两个正整数n和m,n和m的含义如上所述。
输出
对于每组输入数据,输出一个平均值序列,每组输出占一行
样例输入
<span style="color:#333333"><span style="color:#333333">3 2
4 2</span></span>
样例输出
<span style="color:#333333"><span style="color:#333333">3 6
3 7</span></span>
题解:
题目较为简单,但要注意细节,首先给出答案错误的代码:
#include <iostream>
using namespace std;
int main ()
{
int n,m;
while(cin>>n>>m)
{
int a[n];
a[0]=2;
int sum=2;
int flag=1;
for(int i=1;i<n;i++)
{
a[i]=a[i-1]+2;
sum=sum+a[i];
flag++;
if(flag==m)
{
cout<<sum/m<<" ";
flag=0;
sum=0;
}
}
if(flag!=m)
cout<<sum/flag<<endl;
else
cout<<endl;
}
return 0;
}
明明测试样例都通过了,但却显示答案错误,后来再次运行时,发现刚好整除时,运行自动停止,后来仔细看,才发现最后的判断条件不应该是flag!=m,因为当整除时m已经变为0,故应该是flag!=0,才是没有整除的情况。
AC代码:
#include <iostream>
using namespace std;
int main ()
{
int n,m;
while(cin>>n>>m)
{
int a[n];
a[0]=2;
int sum=2;
int flag=1;
for(int i=1;i<n;i++)
{
a[i]=a[i-1]+2;
sum=sum+a[i];
flag++;
if(flag==m)
{
cout<<sum/m<<" ";
flag=0;
sum=0;
}
}
if(flag!=0)
cout<<sum/flag<<endl;
else
cout<<endl;
}
return 0;
}