标题:猴子选大王问题
只看楼主
faminxmu
Rank: 3Rank: 3
来 自:厦门
等 级:论坛游侠
帖 子:191
专家分:106
注 册:2008-4-23
结帖率:70%
 问题点数:0 回复次数:2 
猴子选大王问题
本人的解法是对于m只猴子用构造m*m的数组来保证循环,但我不知道在那里有一个错误本人一直检查不出来麻烦大家有兴趣的话来帮我找找看
#include<stdio.h>
#define M 4
#define N 3
void main()
{
      int i,j;
      int a[M][M];
      for(i=0;i<M;i++)
      for(j=0;j<M;j++)
      a[i][j]=j+1;/*数组初始化*/
     void find(int m,int n,int b[m][m]);
     find(M,N,a);
     system("pause");
     }
     void find(int m,int n,int b[m][m])
     {
         int *p,i,j,z;
         p=*b;
         for(p=*b,z=0;p<*b+m*m;p++)
         {
                                if(*p==0)z=z+0;
                                else z=z+1;
                                if(z==n)
                                {z=0;
                                void ternzero(int *p,int a[m][m]);/*找出被淘汰的猴子*/
                                ternzero(p,b);
                                }
                                }
                                for(j=0,i=0;j<m;j++)
                                if(b[i][j]!=0)printf("第%d猴子是大王",j+1);
                                }
                                void ternzero(int *p,int a[m][m])/*把被淘汰的序号归0*/
                                {
                                     int i,j,c;
                                     for(i=0;i<m;i++)
                                     for(j=0;j<m;j++)
                                     if((*(a+i)+j)==p)
                                     for(c=0;c<m;c++)
                                     a[c][j]=0;
                                     }

[[it] 本帖最后由 faminxmu 于 2008-4-26 10:02 编辑 [/it]]
搜索更多相关主题的帖子: 大王 猴子 
2008-04-26 00:13
faminxmu
Rank: 3Rank: 3
来 自:厦门
等 级:论坛游侠
帖 子:191
专家分:106
注 册:2008-4-23
得分:0 
自己回答
错在在定义函数的时候用到数组所以应该在最上面定义全局变量即数组的大小,还有本人的算法错误,只能求得少数情况的解大部分会出现多解原因是如果N比较大的时候数组不够用

在虚拟的世界中寻找目标。
2008-04-26 11:15
faminxmu
Rank: 3Rank: 3
来 自:厦门
等 级:论坛游侠
帖 子:191
专家分:106
注 册:2008-4-23
得分:0 
改好了,虽然看起来比较乱
/*山上有m只猴子要选大王,选举办法如下:所有猴子从1到m进行编号并围坐一圈,
从第一号开始按顺序1,2,...n继续报数,凡是报n号的猴子都退出到圈外,
照此循环报数,直到圈内只剩下一只猴子时,这只猴子就是大王.输出大王的编号*/
#include<stdio.h>
#define M 6
#define N 3
void main()
{
     int a[M];
     int i;
     for(i=0;i<M;i++)
     a[i]=i+1;
     void find(int m,int n,int a[M]);
     find(M,N,a);
     system("pause");
     }
     void find(int m,int n,int a[M])
     {
          int *p,z=0,i;
          for(p=a;;p++)
          {if(p>a+m-1) p=a;
          if(*p!=0) z=z+1;
          else z=z;
          if(z==n)
          {printf("淘汰%d号\n",*p);
          *p=0;
          z=0;}
          int stop(int m,int a[M]);
          if(stop(m,a)==1)
          {for(i=0;i<M;i++)
          if(a[i]!=0)printf("第%d号是大王\n",a[i]);break;}
          }
          }
          int stop(int m,int a[M])
          {
              int z=0,i;
              for(i=0;i<m;i++)
              if(a[i]!=0)z=z+1;
              return z;
              }

[[it] 本帖最后由 faminxmu 于 2008-4-27 12:27 编辑 [/it]]

在虚拟的世界中寻找目标。
2008-04-27 12:12



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




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

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