鱼C论坛

 找回密码
 立即注册
查看: 3254|回复: 2

出圈游戏。。怎样才能简单些??

[复制链接]
发表于 2011-5-13 13:36:19 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 soldier 于 2011-5-13 14:36 编辑
  1. //************
  2. //**出圈游戏**
  3. //************
  4. #include<stdio.h>
  5. void main()
  6. {
  7.     int clhs(int a[],int n);

  8.     int a[50],i,left,m;
  9.     printf("请输入游戏人数(0至50人): ");
  10.     scanf("%d",&m);

  11.     while(m>50||m<0)
  12.     {
  13.          printf("\n请重新输入人数: ");
  14.          scanf("%d",&m);
  15.     }

  16.     for(i=0;i<m;i++)
  17.         a[i]=i+1;

  18.     left=clhs(a,m);

  19.     printf("\n最后一个出圈的是:  %d\n\n",left);
  20. }

  21. int clhs(int a[],int n)
  22. {
  23.     int *p=a,temp=0;
  24.     while (1)
  25.     {
  26.         if(p==a+n) p=a;

  27.         temp++;
  28.         if(temp==3)
  29.         {            
  30.             temp=0;
  31.             n--;           
  32.             while(p<a+n)    //数到3的时,用下一下数字代替本数
  33.             {
  34.                 *p++=*(p+1);
  35.                 temp++;
  36.             }
  37.             p=p-temp-1;
  38.             temp=0;
  39.         }
  40.         if(n==1) break;
  41.         p++;
  42.     }
  43.     return *p;            
  44. }
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-5-13 13:49:30 | 显示全部楼层
本帖最后由 soldier 于 2011-5-13 14:36 编辑
  1. // Joseph's Problem
  2. // input: n,m                -- the number of persons, the inteval between persons
  3. // output:                -- return the reference of last person

  4. int josephus0(int n, int m)
  5. {
  6.         if (n == 2) return (m%2) ? 2 : 1;
  7.         int v = (m+josephus0(n-1,m)) % n;
  8.         if (v == 0) v = n;
  9.         return v;
  10. }
  11. int josephus(int n, int m)
  12. {
  13.         if (m == 1) return n;
  14.         if (n == 1) return 1;
  15.         if (m >=n) return josephus0(n,m);
  16.         int l = (n/m)*m;
  17.         int j = josephus(n - (n/m), m);
  18.         if (j <= n-l) return l+j;
  19.         j -= n-l;
  20.         int t = (j/(m-1))*m;
  21.         if ((j % (m-1)) == 0) return t-1;
  22.         return t + (j % (m-1));
  23. }
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2011-5-13 14:24:34 | 显示全部楼层
回复 仰望天上的光 的帖子

谢谢大虾,学艺不精看不太懂,我会好好研究研究的,谢谢:loveliness:
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-20 18:13

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表