首页 > 电脑

c语言猴子选大王

更新时间2018-07-13 04:46:01

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语言程序