| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 753 人关注过本帖
标题:一道猴子选大王的题
只看楼主 加入收藏
budong998
Rank: 2
等 级:论坛游民
帖 子:25
专家分:15
注 册:2010-7-18
结帖率:75%
收藏
已结贴  问题点数:20 回复次数:4 
一道猴子选大王的题
在别的论坛看到的.题目如下:有N只猴子选大王,它们的选举办法是这N只猴子围成一圈,然后从其中一只开始从一报数到X,当念到X的猴子就被淘汰.又从淘汰的下一只猴子开始从一报数到X,直到最后留下的一只就是大王.找出最后留下的那只猴子是第几只.
下面是我写的一个程序,头绪有点乱。
程序代码:
#include <stdio.h>
#include <math.h>
main()
{
  int b,c,m,n,i,y,a=0,x[1000];        /*M猴子总数,B是报数的数,X数组存放猴子编号*/
    printf("input two numbers:\n\t");/*提示输入个数和报数数*/
    scanf("%d %d",&m,&b);
  c=m;                               /*保留M的原值,以备后用*/
  for(i=0;i<=m;i++)         /*给X数组付值,值刚好是从0到M的数*/
    x[i]=i;
  y=b%m;
  for(m;m>1;m--) /*第一重循环,控制猴子个数*/
  {  if(b%m<a)                /*确定将要淘汰猴子的位置*/
        y=b%m+m-a;         
      else
        y=b%m-a;
      if(y==0)
        y=m;
      x[c+1]=x[y];
      for(n=y;n<m;n++)       /*第二重循环,把淘汰以后数全部往前挪一个位置,以确保下次少一只猴子。*/
        x[n]=x[n+1];
    x[m]=x[c+1];
    a=m-y;                      /*目前的猴子数与淘汰猴子位置的差*/
  }
  printf("\n第一个数是最后留下的编号.后九个依次倒数淘汰的.\n");
  for(i=1;i<=10;i++)
    printf("%d\t\b",x[i]);
  printf("\n\n");
  getch();
}


[ 本帖最后由 budong998 于 2010-12-18 23:43 编辑 ]
搜索更多相关主题的帖子: 猴子 大王 
2010-12-18 23:40
逐渐学习
Rank: 6Rank: 6
等 级:侠之大者
帖 子:113
专家分:454
注 册:2010-9-26
收藏
得分:5 
参照一下这个讨论https://bbs.bccn.net/thread-328153-1-3.html遮天云的程序代码

帮人《---》帮己
2010-12-19 14:27
a343637412
Rank: 7Rank: 7Rank: 7
来 自:そ ら
等 级:黑侠
帖 子:357
专家分:620
注 册:2010-9-26
收藏
得分:5 
顶二楼..........
2010-12-19 14:38
xzy199999
Rank: 4
等 级:业余侠客
帖 子:326
专家分:286
注 册:2010-11-19
收藏
得分:5 
顶2楼,不知道有人说下原理吗

我是初学者
2010-12-19 14:41
budong998
Rank: 2
等 级:论坛游民
帖 子:25
专家分:15
注 册:2010-7-18
收藏
得分:0 
回复 2楼 逐渐学习
刚看过了.还没有学到指针那里去,看不太明白. 我只能用我现在所学的东西,写出了那串代码.还是可以实现那个功能.我用别人写的代码验正过了.
2010-12-19 19:21
快速回复:一道猴子选大王的题
数据加载中...
 
   



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

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