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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 编程学徙 于 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

评分

参与人数 1技术分 +1 收起 理由
911趣购 + 1 神马都是浮云

查看全部评分

4 个回复

正序浏览
学习学习,顺便拿金币换分
回复 使用道具 举报
编程学徙 发表于 2014-5-10 00:58
跟你解释一下我为什么一定要用数组做……因为,我刚开始学,集合什么的,都还不会用……呃…… ...

这样,好吧。。。。。
回复 使用道具 举报
神马 发表于 2014-5-9 14:07
哈哈,跟我的基础测试题差不多。用集合来做会方便一点,不过题目规定死了。 ...

跟你解释一下我为什么一定要用数组做……因为,我刚开始学,集合什么的,都还不会用……呃……
回复 使用道具 举报
哈哈,跟我的基础测试题差不多。用集合来做会方便一点,不过题目规定死了。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马