首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > J2SE开发 >

一个小练习解决思路

2012-03-28 
一个小练习田径赛跑中,有8条跑道,从键盘输入一个整数n(n8)作为参加比赛的选手人数,安排分组要求人数差距

一个小练习
田径赛跑中,有8条跑道,从键盘输入一个整数n(n>8)作为参加比赛的选手人数,安排分组要求人数差距最少,依次打印输出每组安排的选手人数。

[解决办法]

Java code
package com;import java.util.Scanner;public class Test2 {    public static void main(String[] args) {        Scanner in = new Scanner(System.in);        System.out.println("请输入人数...");        int a = in.nextInt();        int n = a/8;        int t = a%8;        System.out.println(t+"--------"+n);                if(t==0){            for(int i= 1;i<=8;i++){                System.out.println("第"+i+"条跑道有"+n+"人");            }        }        if(t>0){            for(int i= 1;i<=t;i++){                System.out.println("第"+i+"条跑道有"+((n*8)+1)+"人");            }                        for(int i= t+1;i<=8;i++){                System.out.println("第"+i+"条跑道有"+((n*8))+"人");            }                                        }            }}
[解决办法]
下面是我的代码。 由于着急。 还有几个数字没法分组 例如 22、26、33、 你理解下代码然后自己添加下情况就ok了
import java.util.Scanner;
public class a {

/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
//22、26
Scanner in = new Scanner(System.in);
System.out.println("请输入人数...");
int num = in.nextInt();
boolean m =false;
for (int j = 8; j >= 4; j--) {
Sel(num,j,m);

}
}

public static void Sel(int num,int j, boolean m){
int group = num/j;
int bl= num%j; 
if((bl==0 || bl==j-1)&& m==false){
System.out.println("分为"+group+"组");
for (int i = 0; i <= group; i++) {
if (i<group) {
System.out.println("第" + (i + 1) + "组,有"+j+"人");
}else if(bl!=0){
System.out.println("第" + (i + 1) + "组,有"+(j-1)+"人");
}
}
if(bl==0){
System.exit(0);
}
}
}
}

[解决办法]
我的:
Java code
public static void main(String[] args) throws DocumentException {        Scanner in = new Scanner(System.in);        System.out.println("请输入人数...");        int num = in.nextInt();        boolean m = false;        int groups = num % 8 == 0 ? num / 8 : num / 8 + 1;        System.out.println("共分为" + groups + "组");        while (groups >= 1) {            System.out.println("第"+groups+"组人数:" + num / groups);            num = num - num / groups;            groups--;        }    }
[解决办法]
Java code
Scanner in = new Scanner(System.in);        System.out.println("请输入人数...");        int x = in.nextInt();        int i = 8;        int m = x/8;        int mod = x%8;        int count = 0;        int group = 0;        if (mod == 0) {            group = m;            count = i;        } else {            group = m+1;            count = x/(group);        }        if (x%(group) != 0) {            int a = 0;            for (int j = 0; j < x%(group); j++) {                System.out.println("第" + (++a) + "组共" + (count + 1) + "人");            }            for (int j = 0; j < (group)-(x%(group)); j++) {                System.out.println("第" + (++a) + "组共" + count + "人");            }        } else {            for (int j = 0; j < m+1 ; j++) {                System.out.println("第" + j + "组共" + count + "人");            }        } 


[解决办法]
额,不知道我又没有理解你的意思……

Java code
import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;/* 田径赛跑中,有8条跑道,从键盘输入一个整数n(n>8)作为参加比赛的选手人数,安排分组要求人数差距最少,依次打印输出每组安排的选手人数。 */public class Test2{public static void main(String [] args){    System.out.println("请输入参赛人数:\n");    try {        BufferedReader br=new BufferedReader(new InputStreamReader(System.in));        String getinput=br.readLine();        int inpu=Integer.valueOf(getinput);        int ever=inpu/8;  //每组        int sy=inpu%8;    //剩余        int a[]=new int[8];        for(int i=0;i<sy;i++){            sy--;            a[i]+=1;        }        for(int i=0;i<8;i++){            a[i]+=ever;            System.out.println("第"+(i+1)+"组人数是:"+a[i]+"\n");        }            } catch (IOException e) {        e.printStackTrace();    }    }}
[解决办法]
刚才写错了 有点东西 没考虑到 现在改了下
Scanner in = new Scanner(System.in);
System.out.println("请输入人数...");
int x = in.nextInt();
int i = 8;
int m = x/8;
int n= x%8;
int a=1;
for(;a<=8;a++,(n+1)--)
{ if(n>0)

System.out.println("第" + a + "组共" + (m+1)+ "人");
}
else
System.out.println("第" + a + "组共" + m + "人");
}
[解决办法]
探讨

先确定需要多少组
int zushu = (n+7)/8;
差数最少,那就是1.所以先确定组的最少人数。然后在确定有多少组需要加1人。
int zuishaorenshu = n / zushu;
int jia1zushu = n % zushu;
然后循环输出每组人数。
for (int i = 0; i < zushu; i++) {
if (i >= jia1zus……

[解决办法]
Java code
import java.util.Arrays;public class Test {    static final int COUNT = 8;        public static void main(String[] args) {        fun(26);    }    static void fun(int n){        int group = n % 8 == 0 ? n / 8 : n / 8 + 1;//获取组数        int[] array = new int[group];        int avg = n / group;//获取每组最少人数        int m = n - group * avg;//获取剩下的人数m        for(int i = 0;i < array.length;i++){            if(i < m)                array[i] = avg + 1;//将剩下的人数平均分到前m组            else                array[i] = avg;        }        System.out.println(Arrays.toString(array));    }} 

热点排行