实现代码
说实话,写这个我太年轻了,开始先定义数组,后面发现不能用然后去掉数组就很快了
这是不用数组实现的
#include<stdio.h>
int main(){ //[i],[j]循环变量,[m],[n]待输入值,[count]循环变量
int n,m,i,j,sum,count,k; //[t=k*m==n]是否每次取m个数,[sum]要取平均的数的和
while(~scanf("%d %d",&n,&m)){ //这是输入,应该没啥好说的
k=n/m; //接下来都是初始化
count=n;
j=0;
sum=0; //初始化结束
while(count--){ //循环
++j; //计数
sum+=j*2; //取得求平均所需总值
for(i=1;i<=k;i++){ //从0到k,每m*k次取一次平均并输出
if(j==m*i||j==n)
if(j==n)
{if(k*m==n) printf("%d\n",sum/m); //这里主要要注意sum要在输出之后重新初始化
else printf("%d\n",sum/(n-k*m));
break;}
//关于此处break:经过m在n内的最大倍数即k之后(j=m*k+1时),跳出for循环,否则执行下一行for循环中的语句,输出错误的值,sum归0
else {printf("%d ",sum/m);sum=0;}//常规输出
}
}
}
return 0;
}
这是用了数组的代码(只能在我自己的编译器中成功运行,杭电显示编译报错)
#include<stdio.h>
int main(){
int n,m,i,j,sum,c,t,a;
while(~scanf("%d %d",&n,&m))
{
int lis[n],count,k;
k=n/m,t=k*m==n;
int num[k];
for(i=1;i<=n;i++) lis[i]=i*2;
for(c=1;c<=k;c++) num[c]=m*c;
count=n,j=0,sum=0;
while(count--){
sum+=lis[++j];
for(c=1;c<=k;c++){
if(j==num[c]||j==n)
if(j==n)
{if(t) printf("%d\n",sum/m);
else printf("%d\n",sum/(n-num[k]));break;}
else {printf("%d ",sum/m);sum=0;}
}
}
}
return 0;
}
以上就是这次debug的全部,希望对大家有所帮助