HDU--2015
偶数求和
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 56836 Accepted Submission(s): 24787
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
Author
lcy
#include <iostream> #include <stdlib.h> using namespace std; int main() { int n, m, a[110], num, sum, result, b[110]; memset(a,0,110); memset(b,0,110); while (cin >> n>> m) { sum = 0; int flag = 0; num = 2; for (int i=0; i<n; i++) { a[i] = num; num = num+ 2; } if (n / m !=0) { int t = n/m ; int k = 0; int p = m; for ( ; t>0; t--) { sum = 0; for (int j=k;j <p; j++) { sum = sum + a[j]; } result = sum / m; b[flag] = result; flag= flag +1; k = k+m; p = p+m; } cout << b[0]; if (flag > 1) { for (int i=1; i<flag; i++) { cout <<" "<<b[i]; } } if (n%m !=0) { sum = 0; int p= n/m; for (int j=p*m; j<n; j++) { sum = sum +a[j]; } result = sum /(n-p*m); cout << " "<< result ; } cout << endl; } else { for (int j=0; j<n; j++) { sum = sum +a[j]; } result = sum /n; cout << result <<endl; } } return 0; }
这道题把我坑了~最后不足m个则以实际数量求平均值,可是我理解成为了去求所有数的平均值了。然后就是虽然我把这道题目解答出来了 ,但是很明显这道题我的做法有缺陷,如果当n取值超过数组保留范围的时候,我就不能用数组了,再就是代码量明显多了。。借此看了discuss里面觉得比较优秀的一段代码,因此附上如下
#include <stdio.h> int main() { int n,m; while (scanf("%d %d",&n,&m)!=EOF) { int i,count = 0,tmp = 0,sum = 0; for (i=1;i<=n;i++) { count++; tmp += 2; sum += tmp; if (i == n) { printf("%d\n",sum / count); } else if (count == m) { printf("%d ",sum / m); count = 0; sum =0; } } } return 0; }