#include<stdio.h>
int main()
{
int length,interval,hz,cc,ave;
while(scanf("%d %d",&length,&interval)!=EOF)
{
hz=length;
int i=0;
for(length=length-interval;length>interval;length-=interval)
{
int temp=0;
for(int j=1;j<=interval;j++)
{
i+=2;
temp+=i;
cc=temp;
}
ave=cc/interval;
printf("%d ",ave);
}
int temp=0;
for(int j=1;j<=(hz%interval);j++)
{
i+=2;
temp+=i;
cc=temp;
}
printf("%d\n",cc/(hz%interval));
}
return 0;
}
1、在内部的 for 循环中,循环变量 j 的初始值应为 0 而不是 1,因为循环中的计算是从数列的起始值开始的;2、在第一个 for 循环中,循环条件 length > interval 可能会导致错误。应该改为 length >= interval,以确保最后不足 interval 个数时也能进行计算;3、在计算平均值时,使用的是整数除法 cc/interval,这可能导致结果向下取整,而不是四舍五入到最接近的整数。可以考虑使用浮点数运算,并将 cc 和 interval 转换为浮点数进行计算,然后再将结果转换为整数。修改为 ave = (int)((float)cc / interval + 0.5);,其中 (float) 将变量转换为浮点数,+ 0.5 实现四舍五入;4、在最后一个 for 循环中,计算平均值时使用了 (hz % interval),但是该值可能为 0,此时会导致除以 0 的错误。应该添加一个条件判断,当 (hz % interval) 为 0 时,将其改为 interval,即使用 ave = cc / (hz % interval ? hz % interval : interval);。以下附上修改后的代码:
#include <stdio.h>
int main() {
int length, interval, hz, cc, ave;
while (scanf("%d %d", &length, &interval) != EOF) {
hz = length;
int i = 0;
for (length = length - interval; length >= interval; length -= interval) {
int temp = 0;
for (int j = 0; j < interval; j++) {
i += 2;
temp += i;
cc = temp;
}
ave = (int)((float)cc / interval + 0.5);
printf("%d ", ave);
}
int temp = 0;
for (int j = 0; j < (hz % interval ? hz % interval : interval); j++) {
i += 2;
temp += i;
cc = temp;
}
ave = cc / (hz % interval ? hz % interval : interval);
printf("%d\n", ave);
}
return 0;
}