【ACM】【杭电】用C语言实现2015

这篇博客分享了如何用C语言编写程序来计算平均值,无需使用数组。程序通过循环和条件判断实现,避免了数组可能导致的问题。同时,博主提供了两种实现方式,一种不使用数组,另一种虽然在特定环境下运行正确,但在杭电编译器上出现错误。博客还探讨了输入处理和循环结构在计算平均值中的应用。
摘要由CSDN通过智能技术生成

杭电2015


实现代码

说实话,写这个我太年轻了,开始先定义数组,后面发现不能用然后去掉数组就很快了

这是不用数组实现的

#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的全部,希望对大家有所帮助

关于while(~scanf("%d%d",&a,&b))
杭电2015

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值