请教ACM一道题,看答案也不懂,谢谢

题目:偶数求和TimeLimit:2000/1000MS(Java/Others)MemoryLimit:65536/32768K(Java/Others)TotalSu... 题目:
偶数求和
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 23455 Accepted Submission(s): 10185

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

思路:
从题目中可以看出,当这一组的第一个数是X时,下一组的第一个数就是X+2*m
而从X开始连续m个偶数的和就是:
{X + [X + 2×(m - 1)]} × m / 2 = (X + m - 1) × m;
所以平均数就是X + m - 1

代码:
#include <stdio.h>

int main(void)
{
int i, n, m, b, c;

while (scanf("%d%d", &n, &m) != EOF)
{
b = 2;
c = 0;
for (i = 0 ; i < n / m ; i++)
{
printf(c++ ? " %d" : "%d", b + m - 1);
b += m * 2;
}
printf(n % m ? " %d\n" : "\n", b + n % m - 1);
}

return 0;
}
我就这里看不懂,求解释,谢谢
展开
 我来答
百度网友5e57e5cdb
推荐于2016-12-01 · 超过17用户采纳过TA的回答
知道答主
回答量:56
采纳率:0%
帮助的人:66.6万
展开全部
int main(void)
{
int i, n, m, b, c;

while (scanf("%d%d", &n, &m) != EOF)
{
b = 2;
c = 0;
for (i = 0 ; i < n / m ; i++)
{
printf(c++ ? " %d" : "%d", b + m - 1);//输出改组的平均数
b += m * 2;//计算下一组数的第一个数
}
printf(n % m ? " %d\n" : "\n", b + n % m - 1);//最后不足m个,则以实际数量求平均值
}

return 0;
}
追问
那么,n%m如何解释?
追答
n%m       n个数m个为一组,那么n%m就是最后不足m个时的实际个数,b+n%m-1就是该组的平均数了
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式