VJ Promble W 平均值的求法

有一个长度为n(n<=100)的数列,该数列定义为从2开始的递增有序偶数,现在要求你按照顺序每m个数求出一个平均值,如果最后不足m个,则以实际数量求平均值。编程输出该平均值序列。
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);           //最后一个数没有空格,直接换行 
      }
   }
 } 
}
相关推荐
©️2020 CSDN 皮肤主题: 书香水墨 设计师:CSDN官方博客 返回首页