c语言猴子选大王 - 爱问答

(爱问答)

c语言猴子选大王

n只猴子选大王,选举方法如下:从头到尾1,2,3报数,凡报到3的退出,余下的从尾到头1,2,3报数,凡报3的退出,余下的又从头到尾1,2,3报数,凡报到3的退出;依此类推,当剩下两只猴子时,取这时报数报1的为王。若想当猴王,请问当初应占据什么位置?

这个是经典的约瑟夫环问题,以下程序供参考

#include <stdio.h>

int n,k,m;
int list[100]; //最多100
void houzi_fuzi()
{
   int i;
   do
       {
           printf("猴子个数n:");
           scanf("%d",&n);
           if (n<=0) printf("'n'error!'n'no<='0',请重新输入! ");
       }
   while(n<=0);
   for(i=0; i<n; i++)
       list[i]=i+1;
   do
       {
           printf("第一个猴子编号k:");
           scanf("%d",&k);
           k--;
           if (k>=n) printf("'k'error!'k'no>'n',请重新输入! ");
           if (k<0) printf("'k'error!'k'no<='0',请重新输入! ");
       }
   while(k>=n||k<0);
   do
       {
           printf("报数值m:");
           scanf("%d",&m);
           //你的可以直接赋m=3
           if (m<=0) printf("'m'error!'m'no<='0',请重新输入! ");
       }
   while(m<=0);
}
int houzi_houwang()
{
   void houzi_chuju(int m);
   houzi_chuju(m);
   if (n!=1) houzi_houwang();
   return list[0];
}
void houzi_chuju(int m) //计算方法
{
   int i;
   while(n<m)
       m=m-n;;
   k=m+k-1;
   if (k>=n) k=k-n;
   printf("%d号猴子出圈 ",list[k]);
   for ( i=k; i<n; i++)
       list[i]=list[i+1];
   n--;
}
int main()
{
   houzi_fuzi();
   printf("%d号猴子为猴王 ",houzi_houwang());
}


n里面去掉三的倍数

当初占据1的位置就可以了啊

相关标签:c语言

下一篇:求一段c语言程序

上一篇:湖南长沙编程培训机构哪些比较有名?

热门标签:
excel 网盘 破解 word dll
最新更新:
微软重新评估新的Outlook的使用时机 联想推出搭载联发科Helio G80芯片组的Tab M9平板 英特尔创新大赛时间确定! 微软Edge浏览器在稳定渠道中推出Workspaces功能 英伟达RTX4060TiGPU推出MaxSun动漫主题! 谷歌地图为用户提供了街景服务! GameSir 在T4 Kaleid中推出了一款出色的控制器! 微软开始在Windows 11 中测试其画图应用程序的新深色模式! LG电子推出全球首款无线OLED电视 英伟达人工智能芯片崭露头角! Steam Deck可以玩什么游戏-Steam Deck价格限时优惠 雷蛇推出CobraPro鼠标 Kindle电子阅读器可以访问谷歌商店吗 Windows10如何加入组策略 window10图片查看器怎么没有了?