题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2015
题目大意:给你个长度为n(n<=100)的数列,该数列定义为从2开始的递增有序偶数,让你按顺序每m个数求出一个平均值,如果最后不足m个,则以实际数量求平均值
解题思路:
记录 n = 100 的数列的 100 个 前 n(n为1 ~ 100) 项和,一个长度为 n 的 “滑动窗口”, 从头滑动到尾,过程中每次停滞都做一次除以 n 的操作并输出,注意格式,最后判断有没有剩下的了,有就输出来
PS:感觉自己代码写的好丑,思路好挫,因为既然是偶数应该有办法不去计算,直接输出某个数,或者某两个数的平均数,先上AC代码吧,其他的学会了一会来更新
代码:
1 #include<iostream>
2 #include<cmath>
3 #include<iomanip>
4 #include<algorithm>
5 using namespace std;
6 int num;
7 int s[105];
8 int main()
9 {
10 for(int i = 1; i <= 100; i ++)
11 s[i] = s[i - 1] + 2 * i;
12 int m, n;
13 while(cin >> m >> n)
14 {
15 for(int i = 1; i <= m / n; i ++)
16 {
17 if(i == 1)
18 cout << (s[n * i] - s[n * i - n]) / n;
19 else
20 cout << " " << (s[n * i] - s[n * i - n]) / n;
21 }
22
23 if(m % n != 0)
24 cout << " " << (s[m] - s[m / n * n]) / (m - m / n * n);
25 cout << endl;
26 }
27 }
28
29 //2 4 6 8 10//更好的办法