A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 姚永生 中级黑马   /  2013-1-26 16:54  /  1170 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

/*
需求:
n个人围成一圈来报数玩,如果哪个倒霉鬼数到3,
他就被拉出去杀头,变成真正的倒霉鬼,
然后计数又从下个倒霉鬼重新开始,
最后只留下一个倒霉蛋,让他在人间再干点倒霉事。
请问第几个报数的人是倒霉蛋?
==========================================
心情日记:
哈哈,我今天才晓得注释还可以用来写日记:)))
建议以后诸位朋友如果时间充裕,可以考虑用这个写写小说:)))
这个版块的同志有点少,就把这个程序发到这里吧,希望能挣点人气。
也希望伟大的版主能够弄点技术分。
思考这个鬼东西话费了我半个下午。
我是用一个循环解决的,感觉不错。
而且我这个这个程序如果再简单修改一下,
应该可以适用于n人m数的情况。
这个小问题听说还很有名的,
在这里有好几个人用不同的方法把他做出来。
好像有用递归的,也有一个哥们居然用面向对象的思想来实现。
可惜那个帖子我现在找不到了。
有好心人能找到帮忙把它捞上来吧。
我以前也曾留意过这道题,但是都放弃了。
当今天我又面对它时,我又陷入苦苦思考的漩涡里。
这个小问题看似简单,但是做起来却比较难。
=========================================
设计原理:
我经过冥思苦想之后,跟老毕学着找了一个数组,再自己决定使用三个指针。
先把那些倒霉鬼和那个倒霉蛋装到一个数组里,
然后依照自然数顺序给他们编上数字号码,以示区别。
在报数时如果哪个编号的倒霉鬼报到了吉祥数字,我们就用0把他的号码销掉。
同样的如果吉祥数字碰到的编号是0那么它会跟着pos指针继续寻找下一个倒霉鬼。
直到只剩下一个倒霉蛋为止。
pos:这个指针是数组元素前进的指针,
我用一个循环把它放到里面,每转一圈他就自加一下。
count:这个指针是计数器,也是阎王爷的户口本,用他来记录干掉的倒霉鬼的数量,
每干掉一个倒霉鬼他就自加一下。如果只剩下倒霉蛋,game 就 over。
off:报数器。每报到3就清0;
*/
class LuckNumber
{
public static void main(String[] args)
{
  int[] arr = {1,2,3,4,5,6,7,8};//数组
  int pos = 0;//角标指示器
  int count = 0;//清零计数器
  int off = 1;//报数器。初始值为1
  while(count<arr.length-1)
  {
   pos++;//前进
   //如果超出数组边界再想法从头报数。
   if(pos>arr.length-1)
    pos = pos%(arr.length-1)-1;
   //如果元素位置上的数不是0,就开始报数
   if(arr[pos]!=0)
    off++;
   //如果报到3,就将该位置的数清0
   //并且记录下清0的个数
   if(off==3)
   {
    arr[pos] = 0;//清零
    off = 0;//报数器清零。小心,这里的值应该是0;
    count++;//清0计数器
   }
//  System.out.println("pos = "+pos+"  count = "+count+"   off = "+off);
  }
  //打印数组
  for (int i=0; i<arr.length; i++)
  {
   if(arr[i]!=0)
    System.out.print(arr[i]);
  }
}
}

评分

参与人数 1技术分 +1 收起 理由
冯海霞 + 1 神马都是浮云

查看全部评分

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马