题目描述:
有一个长度为n(n<=100)的数列,该数列定义为从2开始的递增有序偶数,现在要求你按照顺序每m个数求出一个平均值,如果最后不足m个,则以实际数量求平均值。编程输出该平均值序列。
输入:
输入数据有多组,每组占一行,包含两个正整数n和m,n和m的含义如上所述。
输出:
对于每组输入数据,输出一个平均值序列,每组输出占一行。
样例输入:
3 2
4 2
样例输出:
3 6
3 7
题目分析:
本题题目意思很明确,而且从题意可知,只需要一次遍历即可(从2一直到n*2)。
注意的是循环中需要判断的状态很多,下面在代码中解释。
代码:
#include<iostream>
using std::cin;
using std::cout;
using std::endl;
int main()
{
int n = 0, m = 0;
while (cin >> n >> m)
{
if (n < 0 || m < 0 || n > 100 || m > 100 || n < m)
break;
int sum = 0, count = 0;
for (int i = 1; i <= n; i++)
{
sum += i * 2;
count++;
if (count == m && i != n)//当累加的的次数到m次,并且不是循环的最后一次,主要用于空格的控制
{
sum /= count;
cout << sum << " ";//主要用于控制此处空格
sum = 0;
count = 0;
}
if (count == m && i == n)//如果是最后一次,用于控制输出回车而不输出空格。本次和上个判断主要用于控制n%m==0时空格和回车的输出
{
sum /= count;
cout << sum << endl;
sum = 0;
count = 0;
}
if (n % m != 0 && i == n)//当n%m!=0时的控制
{
sum /= count;
cout << sum << endl;
sum = 0;
count = 0;
}
}
}
return 0;
}
注:本题写的不够好,冗余较多,以后会继续跟进修改。