2015
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
我觉得没人比我写得更麻烦了...
#include<stdio.h>
int main()
{
int n,m;
int even[100];
while(scanf("%d %d",&n,&m)!=EOF){
int i;
for(i=0; i<n; i++){ //将n个偶数存入数组even中
even[i]=2*(i+1);
}
if(n<m){ //如果n<m,直接对n个数做平均
int mean;
for(i=0; i<n; i++){
mean = mean+even[i];
}
mean = mean/n;
printf("%d\n",mean);
}
else{ //正常情况下n>=m
int time; //time是要求平均值的次数
if(n%m==0){
time = n/m;
}
else{
time = n/m+1;
}
int index = 0;
for(i=0; i<time; i++){
int j;
int sum = 0;
int mean;
if(index!=0&&n/(index)==1&&n%(index)<m){ //最后一次求平均值,不足m个数时
for(j=0; j<n%(index); j++){
sum = sum + even[index];
}
mean = sum/j;
}
else{
for(j=0; j<m; j++,index++){
sum = sum + even[index];
}
mean = sum/m;
}
if(i==0){ //注意输出格式
printf("%d",mean);
}
else{
printf(" %d",mean);
}
}
printf("\n");
}
}
return 0;
}
接下来看一下:https://blog.youkuaiyun.com/qq_34344061/article/details/74993883的代码
#include<stdio.h>
int main(){
int n,m,i;
int a[101],b[101];
while(scanf("%d%d",&n,&m)!=EOF){
int count=0,sum=0,k=0;
for(i=1;i<=n;i++)
a[i]=2*i;
for(i=1;i<=n;i++){
count++;
sum+=a[i];
if(count==m){
b[k++]=sum/m;
printf("k is %d",k);
sum=0;
count=0;
}
}
//如果最后不足m个,则以实际数量求平均值
if(n%m!=0){
b[k]=sum/(n%m);
k++; //因为不足m的sum(b[k])在上一个for循环语句中没有计算
}
for(i=0;i<k-1;i++){
printf("%d ",b[i]);
}
printf("%d\n",b[k-1]);
}
return 0;
}