题目
有一个长度为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<cstdio>
int main(){
int n,m,i,sum,count;
while(scanf("%d %d",&n,&m) != EOF){
sum=0;
count=0;
for(i=2;i<=n*2;i=i+2){
count++;
sum=sum+i;
if(count%m==0&&count!=n){//入口1 当可以整除且不为最后一部分
printf("%d ",sum/m);
sum=0;
}
if(count%m==0&&count==n){//入口2 当可以整除且为最后一部分
printf("%d",sum/m);
}//上面可以整除的时候 使用两种方案是为了控制空格的输出
if((n-count)/m==0&&count==n&&n%m!=0){//入口3 不能被整除且计数器数到了最后且余数不为0
printf("%d",sum/(n%m));
}
}
printf("\n");
}
return 0;
}
这是我第一次写的 下面是我的改良版 使程序更简洁易读
#include<cstdio>
int main(){
int n,m,i,sum,count;
while(scanf("%d %d",&n,&m) != EOF){
sum=0;
count=0;
for(i=2;i<=n*2;i=i+2){
count++;
sum=sum+i;
if(count%m==0){
if(count!=n){//先进入可以整除的入口 再分类讨论 为了控制空格
printf("%d ",sum/m);
sum=0;
}
else{
printf("%d",sum/m);
}
}
if((n-count)/m==0&&count==n&&n%m!=0){//入口2 不能被整除且计数器数到了最后且余数不为0
printf("%d",sum/(n%m));
}
}
printf("\n");
}
return 0;
}
笔记
用分支拆分问题
分类讨论
注意细节
注意累计的数据的重制
这是一个关于编程的题目,要求根据输入的数列长度n和间隔m,计算从2开始的偶数序列的平均值序列。程序首先初始化累计值和计数器,然后遍历偶数序列,每次累加偶数并更新计数器。当计数器能被m整除时,计算并输出平均值。特别地,当序列结束且无法整除时,要处理余数。提供的源代码通过分支结构实现了这一逻辑,并在最后输出换行符。
669

被折叠的 条评论
为什么被折叠?



