
请教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;
}
我就这里看不懂,求解释,谢谢 展开
偶数求和
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;
}
我就这里看不懂,求解释,谢谢 展开
展开全部
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;
}
{
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就是该组的平均数了
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询