黑马程序员技术交流社区

标题: M个人围成一个圈的问题……求技术分…… [打印本页]

作者: 编程学徙    时间: 2014-5-9 03:27
标题: M个人围成一个圈的问题……求技术分……
本帖最后由 编程学徙 于 2014-5-9 03:34 编辑

[ 本帖最后由 编程学徙 于 2014-5-9 03:33 编辑 ]\n\n废话少说,先上代码……
  1. /**
  2. *此程序解决的问题:M个人围成一圈,从1报到N,数到N的人退出,最后剩下Y个人的是原来的多少多少号?
  3. *思路:用利用数组的灵活性来解决这个问题。
  4. *步骤:
  5. *1、先创建一个由M个元素组成的数组;
  6. *2、把下标为m的数赋值为m+1,相当于给每人一个编号;
  7. *3、设置一个变量i;
  8. *4、让数组下标的值从0递增到M-1,然后返回0,再递增,循环不止;
  9. *5、i的值随m的递增而递增(如果下标为m的元素其值为0,则不递增),如果i%N==0,则把元素赋值为0(相当于这个编号的人退出圈子);
  10. *6、用变量n统计剩下人的个数,直到n==Y,循环终止;
  11. *7、遍历数组,输出其中不为0的数,既为剩下的人的编号。
  12. */

  13. class Bao_Shu
  14. {
  15.         public static void main(String[] args)
  16.         {
  17.                 final int M = 100;
  18.                 final int N = 14;
  19.                 final int Y = 3;
  20.                 int m,n = M;
  21.                 int i = 0;
  22.                 int array[] = new int[M];
  23.                 for(m=0;m<M;m++)
  24.                 {
  25.                         array[m] = m+1;                                                                                //为成员编号;
  26.                 }
  27.                 for(m=0;;m++)
  28.                 {
  29.                         if(m==M)
  30.                         {
  31.                                 m = 0;
  32.                         }
  33.                         if(array[m]!=0)
  34.                         {
  35.                                 i++;
  36.                                 if(i%N==0)
  37.                                 {
  38.                                         array[m] = 0;
  39.                                         n--;                                                                                //n用于统计剩下的人的个数,每退出一个人,n的值减1;
  40.                                         if(n==Y)
  41.                                         {
  42.                                                 break;
  43.                                         }
  44.                                 }
  45.                         }
  46.                 }
  47.                 System.out.println("剩下的是");
  48.                                                 
  49.                 for(int s :array)
  50.                 {
  51.                         
  52.                         if(s!=0)
  53.                         {
  54.                                 
  55.                                 System.out.println(s+"号.");                                        //输出剩下的人的编号;
  56.                         }                        
  57.                 }
  58.                
  59.         }
  60. }
复制代码


运行结果:


新手不容易,想进黑马却没有技术分的新手更不容易……路过的前辈,给点儿技术分呗……谢谢。。

结果。。。.jpg (62.82 KB, 下载次数: 22)

结果。。。.jpg

作者: 神马    时间: 2014-5-9 14:07
哈哈,跟我的基础测试题差不多。用集合来做会方便一点,不过题目规定死了。
作者: 编程学徙    时间: 2014-5-10 00:58
神马 发表于 2014-5-9 14:07
哈哈,跟我的基础测试题差不多。用集合来做会方便一点,不过题目规定死了。 ...

跟你解释一下我为什么一定要用数组做……因为,我刚开始学,集合什么的,都还不会用……呃……
作者: 神马    时间: 2014-5-10 08:17
编程学徙 发表于 2014-5-10 00:58
跟你解释一下我为什么一定要用数组做……因为,我刚开始学,集合什么的,都还不会用……呃…… ...

这样,好吧。。。。。
作者: 175299882    时间: 2014-5-10 16:09
学习学习,顺便拿金币换分




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