有一个长度为n(n<=100)的数列,该数列定义为从2开始的递增有序偶数,现在要求你按照顺序每m个数求出一个平均值,如果最后不足m个,则以实际数量求平均值。编程输出该平均值序列。
Input
输入数据有多组,每组占一行,包含两个正整数n和m,n和m的含义如上所述。
Output
对于每组输入数据,输出一个平均值序列,每组输出占一行。
Sample Input
3 2
4 2
Sample Output
3 6
Input
输入数据有多组,每组占一行,包含两个正整数n和m,n和m的含义如上所述。
Output
对于每组输入数据,输出一个平均值序列,每组输出占一行。
Sample Input
3 2
4 2
Sample Output
3 6
3 7
注意:1.我当时卡在了多次输入时的while语句,while(scanf("%d%d",&n,&m))是不对的,他会是一个死循环,提交后显示超 时,但加上~就不会了,while(~scanf("%d%d",&n,&m))就对了,它不会进入一种死循环。
2.要有极限的思想,比如当n%m=0的情况,当不等于0的情况,因为你要注意每一组输出的最后一个数没有空格。
代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 | #include<stdio.h> main() {int n,m,i,j,k,aver,s,a[100]; a[0]=2; for(i=1;i<100;i++) a[i]=a[i-1]+2; while(~scanf("%d%d",&n,&m)) //注意~,~的意思实际上是检测是不是到文件尾,相当于 while(scanf()!=EOF),没有~就成了死循环 {for(i=0;i<n;i++) {if(n-i<m) //如果剩余的数<m,将剩余的数求平均值 {s=0; k=i; //k用来记录此时i的位置,i用来使这一组的整个大循环结束,进入下一组输入 for(j=k;j<n;j++,i++) s=s+a[j]; aver=s/(n-k); printf("%d\n",aver); } else if(n-i>m) {s=0; for(j=i;j<i+m;j++) s=s+a[j]; aver=s/m; i=i+m-1; printf("%d ",aver); } else {s=0; for(j=i;j<i+m;j++) s=s+a[j]; aver=s/m; i=i+m-1; printf("%d\n",aver); //最后一个数没有空格,直接换行 } } } } |