标题:猴子选大王问题,不知为何我的程序运行不起来
只看楼主
lol1234
Rank: 1
等 级:新手上路
帖 子:46
专家分:3
注 册:2014-4-11
结帖率:66.67%
已结贴  问题点数:1 回复次数:21 
猴子选大王问题,不知为何我的程序运行不起来


#include<stdio.h>
void main()
{
    int n,m,i,k,count=0,count2=0,z=1,p=1,starting=1;
    while(1)
    {   printf("输入猴子总数以及报数终止数字并用逗号隔开(猴子数小于50只):");
        scanf("%d,%d",&n,&m);
        if(n>1&&n<1000&&m>=2)
           break;
    }
    int a[50];
    for(i=1;i<=n;i++)
        a[i]=i;
    while(z=1)
    {
            while(p=1)
        {
        for(i=starting;i<=n;i++)
            {
              if(a[i]!=0)
                count=count+1;
              if(count=m)
              {
                  a[i]=0;
                  starting=i+1;
                  break;
              }
              if(i==n)
              {
                  p=0;
                  count=0;
                  break;
              }
            }
        }
        for(k=1;k<=n;k++)
            {
                if(a[k]!=0)
                count2=count2+1;
            }
        if(count2==1)
            z=0;
        else
            count2=0;
    }
    printf("%4d号猴子为猴王:",starting-1);
}
搜索更多相关主题的帖子: starting include starting count include count 大王 大王 
2014-04-11 21:44
lol1234
Rank: 1
等 级:新手上路
帖 子:46
专家分:3
注 册:2014-4-11
得分:0 
自顶  求帮助  写了两种 最后这种感觉很好  可是还是无法运行
2014-04-11 21:46
lol1234
Rank: 1
等 级:新手上路
帖 子:46
专家分:3
注 册:2014-4-11
得分:0 
来人啊~~~~~~~~~~
2014-04-11 21:59
lol1234
Rank: 1
等 级:新手上路
帖 子:46
专家分:3
注 册:2014-4-11
得分:0 
有人解答么~~ 大神求帮忙
2014-04-11 22:06
azzbcc
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:江西财经大学
等 级:贵宾
威 望:81
帖 子:3293
专家分:12919
注 册:2012-11-4
得分:1 
算法不说了,百度 约瑟夫问题

判断相等应该用 == ,建议把常数 放在左边 避免这种错误 比如 while (1 == z)


[fly]存在即是合理[/fly]
2014-04-11 22:22
lol1234
Rank: 1
等 级:新手上路
帖 子:46
专家分:3
注 册:2014-4-11
得分:0 
回复 5楼 azzbcc
好的!我改了!   另外  我百度到的,约瑟夫问题很多都是用到了其他内容,链表呀、什么的,我才学到数组,这道题也规定用数组做~  哎~
2014-04-11 22:29
lol1234
Rank: 1
等 级:新手上路
帖 子:46
专家分:3
注 册:2014-4-11
得分:0 
我检查了一下  以这个为最新的:但是还是无法运行

程序代码:
#include<stdio.h>
void main()
{
    int n,m,i,k,count=0,count2=0,z=1,p=1,starting=1;
    /*while(1)
    {   */printf("输入猴子总数以及报数终止数字并用逗号隔开(猴子数小于一千只):");
        scanf("%d,%d",&n,&m);
        /*if(n>1&&n<1000&&m>=2)
           break;
    }*/
    int a[10];
    for(i=1;i<=n;i++)
        a[i]=i;
    while(1==z)
    {
            while(1==p)
        {
        for(i=starting;i<=n;i++)
            {
              if(a[i]!=0)
                count=count+1;
              if(count==m)
              {
                  a[i]=0;
                  starting=i+1;
                  count=0;
                  break;
              }
              if(i==n)
              {
                  p=0;
                  break;
              }
            }
        }
        for(k=1;k<=n;k++)
            {
                if(a[k]!=0)
                count2=count2+1;
            }
        if(count2==1)
            z=0;
        else
        {
            count2=0;
            p=1;
        }
    }
    printf("%4d号猴子为猴王:",starting-1);
}
2014-04-11 22:41
fragileeye
Rank: 5Rank: 5
等 级:职业侠客
威 望:2
帖 子:107
专家分:387
注 册:2011-5-21
得分:1 
楼主思维都开始有点混乱了,是吧、
稍微改了下lz代码,看看注释
程序代码:
#include <stdio.h>

int main( int argc, int *argv[] )
{
    int n,m,i,k,count=0,count2=0;
    int a[10];
    
    
    printf("输入猴子总数以及报数终止数字并用逗号隔开(猴子数小于一千只):");
    scanf("%d,%d",&n,&m);
   
    for( i = 0; i < n; i++ )
    {
        a[i]= i+1;
    }
    
    i = 0;
    while(1)
    {
           if(a[i]!=0)
           {
               count=count+1;
           }
             
          if(count == m)
          {        
              a[i]=0;
            /*starting=i+1; 这个逻辑是错的 */
             count2++;
              count=0;
        }
        if(count2 == n - 1)//搞清楚循环结束条件! 
        {
             break;
           }
           i = (i + 1) % n;
    }
    for( i = 0; i < n; ++i )
    {
        if( a[i] != 0 )
        {
            printf("第%d个猴子为大王\n", a[i]);
            break;
        } 
    } 
    
    return 0; 
}

再改简单点。

[ 本帖最后由 fragileeye 于 2014-4-12 01:33 编辑 ]
2014-04-11 23:03
lol1234
Rank: 1
等 级:新手上路
帖 子:46
专家分:3
注 册:2014-4-11
得分:0 
回复 8楼 fragileeye
可能是!可能写的作业多了。。。有点混乱  你的程序你运行到结果了么?我把你的运行了一下,发现什么结果都没有。。。怎么回事?~~求解~~
2014-04-11 23:32
lol1234
Rank: 1
等 级:新手上路
帖 子:46
专家分:3
注 册:2014-4-11
得分:0 
回复 5楼 azzbcc
我想了一下 我觉得我的想法有问题 因为万一要报的数字比猴子数多我的算法就错了。。。  哎。。。只用数组感觉好难做啊
2014-04-11 23:56



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-429976-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.464274 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved