黑马程序员技术交流社区

标题: 约瑟夫的数学题目 [打印本页]

作者: 何旭栋    时间: 2012-7-14 00:57
标题: 约瑟夫的数学题目
网上看到一题目,挺好玩的,分享下,大家有兴趣练练
    15个红球和15个绿球排成一圈,从第1个球开始数,当数到第13个球时就拿出此球,然后再从下一个球开始数,当再数到第13个球时又取出此球,如此循环进行,直到仅剩15个球为止,问怎样排法才能使每次取出的球都是红球?
作者: 丁二跃    时间: 2012-7-14 01:41
  1. public class Demo {

  2.        
  3.         public static void main(String[] args) {
  4.                
  5.                 int[] nums =new int[30];
  6.         //初始所有位置为 0 ,一次查数 ,到 13 时 设为 1 表示为红球 取出 下一次不记录该位置
  7.                 //
  8.                 for(;;){
  9.                         int redNum=0;  //红球个数标记  找够15个跳出循环
  10.                          int count = 0; //球 标记  每 13 个 标记一次红球
  11.                         for(int k=0;;k++){
  12.                                
  13.                           if(nums[k%30]==0)count++;  //k %30  形成循环
  14.                           
  15.                           if(count==13){ //查够13 个球
  16.                                   nums[k%30]=1; // 第13 标记为红 取出
  17.                                   redNum++;    //红球个数 加1
  18.                                   count = 0;  //计数清零  开始下一轮
  19.                                   System.out.println("第 "+redNum+" 个取出红球位置  "+(k%30+1)); //打印红球位置,
  20.                                                                                          //也可取出放入一个数组,处理后输出
  21.                                   if(redNum==15)break;// 红球取完 结束 跳出循环
  22.                           }
  23.                 }
  24.                         break;
  25.         }

  26.   }
  27. }
复制代码
和以前一个翻牌的题很 象,用数组 模拟……详情如上
作者: 蒋映辉    时间: 2012-7-14 07:01
这是玩链表的经典练习题吧。。。。。用链表做其实挺简单的
作者: 韦念欣    时间: 2012-7-14 09:23
也可以使用JAVA工具类中的LinkedList来做这道题,这个类和链表类似。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2