一段用vc++6.0编写的程序输出很慢,要一分多钟才能输出完

#include<stdio.h>#include<string.h>intop(int*p,intm,intt,inti){intsum=0;while(1){t++;... #include<stdio.h>
#include<string.h>
int op(int*p,int m,int t,int i){
int sum=0;
while(1){
t++;
if(t>i) t=1;
sum+=p[t];
if(sum==m){
p[t]--;
break;
}
}
return t;
}
int main()
{
int i;
while(scanf("%d",&i)!=EOF){
int m;
scanf("%d",&m);
int p[10000];
memset(p,1,sizeof(p));
int k;
int t=0;
int num=1;
for(k=0;k<i-1;k++){
t=op(p,m,t,i);
printf("N0.%d:%d\n",num,t);
num++;
}
t=op(p,m,t,i);
printf("The winner is %d\n",t);
}
return 0;
}
展开
 我来答
bhtzu
2013-11-12 · TA获得超过1.1万个赞
知道大有可为答主
回答量:8088
采纳率:85%
帮助的人:4043万
展开全部
        if(sum>=m){//==
            p[t]--;
            break;
        }

你这里用等于,但实际上你sum每次加的不是1,不会正好等于m,这样就会无限加下去,一直加到int溢出,然后。。从负数继续加,这样不知道多少个循环之后才恰好等于,也许赶巧了还一直不相等,就做死机状。

追问
知道自己怎么错了,虽然不是你回答的,不过还是谢谢了
追答
不说明自己的算法目的。。哪知道应该改哪里呀
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式