C语言编的约瑟夫问题(猴子选大王)求大神看哪里错了

#include<stdio.h>intmain(){intc;for(c=0;c<12332;c++){intsz[300],a,s,i,k,n,m,b;scanf("... #include<stdio.h>
int main(){
int c;
for(c=0;c<12332;c++){
int sz[300],a,s,i,k,n,m,b;

scanf("%d %d",&n,&m);
if(n==0&&m==0){break;}
a=0,b=0,s=0;

for(i=0;i<n;i++){
sz[i]=1;}
for(k=0;k<n;k++){
if(sz[k]==1){
s=s+1;
if(s==m){
sz[k]=0,s=0,b=b+1;}}
if (k==n-1){
k=0;}
if (b==n-1){break;}
}

for(i=0;i<n;i++){
if(sz[i]==1){
printf("%d\n",i);}
}}
return 0;}

约瑟夫问题:有n只猴子,按顺时针方向围成一圈选大王(编号从1到n),从第1号开始报数,一直数到m,数到m的猴子退出圈外,剩下的猴子再接着从1开始报数。就这样,直到圈内只剩下一只猴子时,这个猴子就是猴王,编程求输入n,m后,输出最后猴王的编号。

输出总是0,求大神啊
展开
 我来答
濮方雅BX
2013-12-16 · TA获得超过4042个赞
知道大有可为答主
回答量:2482
采纳率:60%
帮助的人:2468万
展开全部
for(k=0;k<n;k++){
if(sz[k]==1){
s=s+1;
if(s==m){
sz[k]=0,s=0,b=b+1;}}
if (k==n-1){
k=0;}
if (b==n-1){break;}
}
改成:
k=0;
while(b<n-1)
{
    if(sz[k]==1)
    {
        s=s+1;
        if(s==m){sz[k]=0;s=0;b=b+1;}
    }
    k++;
    if (k==n-1){k=0;}
}
做而论道
高能答主

2013-12-16 · 把复杂的事情简单说给你听
知道大有可为答主
回答量:3万
采纳率:80%
帮助的人:1.2亿
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式