本帖最后由 吕猛 于 2012-2-28 22:00 编辑
- /*
- 思路:
- 1、首先,每次一个人跑,这样每组人数差距肯定都是小的,为0。所以,定义跑道最少2个起。
- 2、用参加比赛的人数分别取“用不同个数跑道”比赛的膜。(参加比赛人数分别除以不同跑道数=剩余人数)
- 3、用一个数组盛放这些膜的数值。首先,为了尽量减少比赛次数,尽量让每次比赛的人数多,所以从8个跑道开始测试。
- 然后,为了,便于计算和逻辑,建一个可以盛放9个数的数组,数组用8-1号坐标,0坐标不用。
- 4、按照楼主要求,“要求人数差距最少”,所以,如果正好被平分的话,最好,所以首先判读膜能否为0.
- 5、不能为0的话,求用不同个数跑道比赛,最少的剩余。如果剩余的数+每次比赛的数<8个人,
- 那就可以定下用多少跑道了。让剩余的人和其中任何一组一起参加比赛就可以了。
- */
- class Demo
- {
- public static void main(String[] args)
- {
- int inNumble=11;
- //我还没学的输入,请手动修改上面的参加比赛的人数。
- int [] Gap = new int[9];
- int meiCiRenShu=0;
- int yuXiaRenShu=8;
- final int zuiShaoPaoDao=2;
- for(int x=8;x>=zuiShaoPaoDao;x--)
- {
- Gap[x] = inNumble%x;
- if(Gap[x]==0)
- {
- meiCiRenShu=x;
- break;
- }
- }
- if(meiCiRenShu!=0)
- {
- System.out.println("第1组参加比赛:"+meiCiRenShu+"人");
- inNumble=inNumble-meiCiRenShu;
- for(int x =2;inNumble>0;x++)
- {
- System.out.println("第"+x+"组参加比赛:"+meiCiRenShu+"人");
- inNumble=inNumble-meiCiRenShu;
- }
- }
- else
- {
- System.out.println("......");
- for(int x=8;x>=zuiShaoPaoDao;x--)
- {
- if(Gap[x]+x<=8)
- {
- if(Gap[x]<yuXiaRenShu)
- {
- yuXiaRenShu=Gap[x];
- meiCiRenShu=x;
- }
- }
- }
- System.out.println("第1组参加比赛:"+(yuXiaRenShu+meiCiRenShu)+"人");
- inNumble=inNumble-yuXiaRenShu;
- inNumble=inNumble-meiCiRenShu;
- for(int x =2;inNumble>0;x++)
- {
- System.out.println("第"+x+"组参加比赛:"+meiCiRenShu+"人");
- inNumble=inNumble-meiCiRenShu;
- }
- }
- }
- }
复制代码 试着写了段,但是貌似不符合楼主意思。但是,“要求人数差距最少”满足了。楼主想让减小比赛次数,修改一下最少使用跑道数就行了。 |