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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 黄方 中级黑马   /  2012-2-28 17:45  /  1634 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

田径赛跑中,有8条跑道,从键盘输入一个整数n(n>8)作为参加比赛的选手人数,安排分组要求人数差距最少,依次打印输出每组安排的选手人数。
样例:n = 9则分为两组,人数分别为5、4;n = 25分为4组,人数分别为7、6、6、6。

评分

参与人数 1技术分 +1 收起 理由
老罗 + 1 楼主自己会吗?哈哈。

查看全部评分

3 个回复

倒序浏览
哥们,安你的说法,我感觉n = 25分为5组,人数分别为5、5、5、5岂不是更好?貌似题不太严格吧。
回复 使用道具 举报
本帖最后由 吕猛 于 2012-2-28 22:00 编辑
  1. /*
  2. 思路:
  3. 1、首先,每次一个人跑,这样每组人数差距肯定都是小的,为0。所以,定义跑道最少2个起。
  4. 2、用参加比赛的人数分别取“用不同个数跑道”比赛的膜。(参加比赛人数分别除以不同跑道数=剩余人数)
  5. 3、用一个数组盛放这些膜的数值。首先,为了尽量减少比赛次数,尽量让每次比赛的人数多,所以从8个跑道开始测试。
  6. 然后,为了,便于计算和逻辑,建一个可以盛放9个数的数组,数组用8-1号坐标,0坐标不用。
  7. 4、按照楼主要求,“要求人数差距最少”,所以,如果正好被平分的话,最好,所以首先判读膜能否为0.
  8. 5、不能为0的话,求用不同个数跑道比赛,最少的剩余。如果剩余的数+每次比赛的数<8个人,
  9. 那就可以定下用多少跑道了。让剩余的人和其中任何一组一起参加比赛就可以了。

  10. */
  11. class  Demo
  12. {
  13.         public static void main(String[] args)
  14.         {       
  15.                 int inNumble=11;
  16.                 //我还没学的输入,请手动修改上面的参加比赛的人数。
  17.                 int [] Gap = new int[9];
  18.                 int meiCiRenShu=0;
  19.                 int yuXiaRenShu=8;
  20.                 final int zuiShaoPaoDao=2;
  21.                 for(int x=8;x>=zuiShaoPaoDao;x--)
  22.                 {
  23.                         Gap[x] = inNumble%x;
  24.                         if(Gap[x]==0)
  25.                         {
  26.                                 meiCiRenShu=x;
  27.                                 break;
  28.                         }       
  29.                 }
  30.                 if(meiCiRenShu!=0)
  31.                 {
  32.                         System.out.println("第1组参加比赛:"+meiCiRenShu+"人");
  33.                         inNumble=inNumble-meiCiRenShu;
  34.                         for(int x =2;inNumble>0;x++)
  35.                         {
  36.                                 System.out.println("第"+x+"组参加比赛:"+meiCiRenShu+"人");
  37.                                 inNumble=inNumble-meiCiRenShu;
  38.                         }
  39.                 }
  40.                 else
  41.                 {
  42.                         System.out.println("......");
  43.                         for(int x=8;x>=zuiShaoPaoDao;x--)
  44.                         {
  45.                                 if(Gap[x]+x<=8)
  46.                                 {
  47.                                         if(Gap[x]<yuXiaRenShu)
  48.                                         {
  49.                                                 yuXiaRenShu=Gap[x];
  50.                                                 meiCiRenShu=x;
  51.                                         }
  52.                                 }
  53.                         }
  54.                         System.out.println("第1组参加比赛:"+(yuXiaRenShu+meiCiRenShu)+"人");
  55.                         inNumble=inNumble-yuXiaRenShu;
  56.                         inNumble=inNumble-meiCiRenShu;
  57.                         for(int x =2;inNumble>0;x++)
  58.                         {
  59.                                 System.out.println("第"+x+"组参加比赛:"+meiCiRenShu+"人");
  60.                                 inNumble=inNumble-meiCiRenShu;
  61.                         }
  62.                 }
  63.         }       
  64. }
复制代码
试着写了段,但是貌似不符合楼主意思。但是,“要求人数差距最少”满足了。楼主想让减小比赛次数,修改一下最少使用跑道数就行了。

评分

参与人数 1技术分 +3 收起 理由
老罗 + 3 赞一个!

查看全部评分

回复 使用道具 举报
吕猛 发表于 2012-2-28 20:34
哥们,安你的说法,我感觉n = 25分为5组,人数分别为5、5、5、5岂不是更好?貌似题不太严格吧。 ...

额,要求跑道也最少!!

评分

参与人数 1技术分 +1 收起 理由
老罗 + 1 坐等答案

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马