有一個長度爲n(n<=100)的數列,該數列定義爲從2開始的遞增有序偶數,現在要求你按照順序每m個數求出一個平均值,如果最後不足m個,則以實際數量求平均值。編程輸出該平均值序列。
本題可以用兩層循環,首先計算將數組分爲每m個數一組後還剩餘多少個數是不足m個的,最後對它們單獨求平均值並輸出。
兩層循環中,外層循環控制可以分組的那些數的下標變化,注意循環變量每次要加上每組的個數;內層循環控制每組數字的長度,注意這裏數組下標是固定的,所以每次要從i到i+m。
最後要注意輸出格式,最後一個數後面是沒有空格的,但不能確定這組數是否能剛好分成每m個一組,所以要用flag來控制空格的輸出。
#include<stdio.h>
int a[100];
int main()
{
int n,m,i,j,k,t,ave,flag,sum=0;
while (scanf ("%d%d",&n,&m)!=EOF)
{
t=n%m,flag=0;
for (i=0;i<n;i++)
a[i]=2*(i+1);//初始化數組
for (i=0;i<n-t;i+=m)
{
sum=0;
for (j=i;j<i+m;j++)
sum+=a[j];
ave=sum/m;
if (flag==1)
printf (" ");
printf ("%d",ave);
flag=1;
}
if (t!=0)
{
sum=0;
for (k=n-t;k<n;k++)
sum+=a[k];
ave=sum/t;
printf (" %d\n",ave);
}
else
printf ("\n");
}
return 0;
}