解决方案 »

  1.   

    40分入账public class HowManyHorses {
        public static void main(String[] args) {
            final int HORSE_NUMBER = 100;
            final int FOOD_NUMBER = 100;
            for (int bigHorseNumber = 0; bigHorseNumber <= HORSE_NUMBER; bigHorseNumber++) {
                for (int smallHorseNumber = 0; smallHorseNumber <= HORSE_NUMBER; smallHorseNumber++) {
                    for (int ponyNumber = 0; ponyNumber <= HORSE_NUMBER; ponyNumber++) {
                        if (bigHorseNumber + smallHorseNumber + ponyNumber == HORSE_NUMBER &&
                            ponyNumber % 2 == 0 &&
                            bigHorseNumber * 3 + smallHorseNumber * 2 + ponyNumber / 2 == FOOD_NUMBER) {
                            System.out.println(bigHorseNumber + " " + smallHorseNumber + " " + ponyNumber);
                        }
                    }
                }
            }
        }
    }
    输出:
    2 30 68
    5 25 70
    8 20 72
    11 15 74
    14 10 76
    17 5 78
    20 0 80
      

  2.   

    public class HowManyHorses {
        public static void main(String[] args) {
            final int HORSE_NUMBER = 100;
            final int FOODS_NUMBER = 100;
            for (int bigHorseNumber = 0; bigHorseNumber <= ( HORSE_NUMBER / 3 + 1 ); bigHorseNumber++) {
                for (int smallHorseNumber = 0; smallHorseNumber <= (HORSE_NUMBER / 2 + 1); smallHorseNumber++) {
                    for (int ponyNumber = 0; ponyNumber <= HORSE_NUMBER; ponyNumber++) {
                        if (bigHorseNumber     + smallHorseNumber     + ponyNumber     == HORSE_NUMBER
                         && bigHorseNumber * 3 + smallHorseNumber * 2 + ponyNumber / 2 == FOODS_NUMBER
                         &&                                             ponyNumber % 2 == 0) {
                            System.out.println(bigHorseNumber + " " + smallHorseNumber + " " + ponyNumber);
                        }
                    }
                }
            }
        }
    }优化了一下循环的终止条件,减少了一些循环次数
      

  3.   

    其实就是根据数学方程式然后转换成Java中的循环问题,楼主理解一下题目,然后理一下思绪就可以了,还是不难的。
      

  4.   

    下面是代码,就100左右的规模也没啥优化的必要,直接三重循环了。
    结果貌似底下这样:
    da is2 xiao is30 zai is68
    da is5 xiao is25 zai is70
    da is8 xiao is20 zai is72
    da is11 xiao is15 zai is74
    da is14 xiao is10 zai is76
    da is17 xiao is5 zai is78
    public class Horse { public static void main(String[] args) {
    // TODO Auto-generated method stub

    int da = 0;
    int xiao = 0;
    int zai = 0;

    for(da = 1; da < 100; ++ da)
    {
    for(xiao = 1; xiao < 100; ++xiao)
    {
    for(zai = 1; zai < 100; ++zai)
    {
    if(da * 3 + xiao * 2 + zai / 2 == 100 
    && da + xiao + zai == 100
    && zai % 2 == 0)
    {
    System.out.println("da is" +da +" xiao is" + xiao + " zai is" + zai);
    }
    }

    }
    } }}
      

  5.   

    用两个循环就可以了
    ponyNumber =HORSE_NUMBER -bigHorseNumber -smallHorseNumber 
      

  6.   

       public static void main(String[] args) {
    final int HOURSE_COUNT = 100;
    int RICE_COUNT = 100;
    for (int i=0;i<=HOURSE_COUNT;i++){
    for (int j = 0; j <= HOURSE_COUNT; j++) {
    if((HOURSE_COUNT-(i+j))%2 != 0){
    continue;
    }else 
    if(3*i+j*2 + (HOURSE_COUNT-(i+j))/2 == RICE_COUNT){
                       System.out.println("大马="+i+"\n小马="+j+"\n小马仔="+ (100-i-j)+"\n\n");
    }
    }
    }
    }
      

  7.   

    大马x,小马y,先获得二元一次方程
    5x + 3y = 100的整数解
    马崽就是 100 - x - y代码:class horse{
      public static void main(String args[]){
        int i, j;
        for(i = 0; i < 20; i++){
          for(j = 0; j < 32; j++){
            if((5 * i + 3 * j) == 100)
              System.out.println("big:" + i + ",small: " + j + ",young:" + (100 - i - j));
          }
        }
      }
    }解有以下几组:
    大马   小马  马崽
    2, 30, 68
    5,25,70
    8,20,72
    11,15,74
    14,10,76
    17,5,78
      

  8.   

    如果可以为0的话,代码为class horse{
      public static void main(String args[]){
        int i, j;
        for(i = 0; i <= 20; i++){
          for(j = 0; j <= 32; j++){
            if((5 * i + 3 * j) == 100)
              System.out.println("big:" + i + ",small: " + j + ",young:" + (100 - i - j));
          }
        }
      }
    }解有以下几组:
    大马   小马  马崽
    2, 30, 68
    5,25,70
    8,20,72
    11,15,74
    14,10,76
    17,5,78 
    20,0,80
      

  9.   

    原谅我只会方程式x + y + z = 100
    3x + 2y + 1/2 z = 100
      

  10.   

    用两个循环就可以了
    ponyNumber =HORSE_NUMBER -bigHorseNumber -smallHorseNumber 
    public class HowManyHorses2Loops {    public static void main(String[] args) {
            final int HORSE_NUMBER = 100;
            final int FOODS_NUMBER = 100;
            for (int bigHorseNumber = 0; bigHorseNumber <= HORSE_NUMBER / 3 + 1; bigHorseNumber++) {
                for (int smallHorseNumber = 0; smallHorseNumber <= HORSE_NUMBER / 2 + 1; smallHorseNumber++) {
                    int ponyNumber = HORSE_NUMBER - bigHorseNumber - smallHorseNumber;
                    if (bigHorseNumber * 3 + smallHorseNumber * 2 + ponyNumber / 2 == FOODS_NUMBER && ponyNumber % 2 == 0) {
                        System.out.println(bigHorseNumber + " " + smallHorseNumber + " " + ponyNumber);
                    }
                }
            }
        }
    }
    多谢提示
      

  11.   

    这有点像蓝桥杯的题目,java趣味编程,顶二楼的代码
      

  12.   

    public static void main(String args[]){
    System.out.println(System.currentTimeMillis());
    for(int i=0;i<34;i++){
    for(int j=0;j<51;j++){
    if(((HORSE_COUNT-(i+j)) % 2) ==0){
    if((i*3 + j*2 +(HORSE_COUNT-(i+j)) /2)==RICE_NUMBER){
    System.out.println("大马"+i+" 小马:"+j+" 小马仔:"+(HORSE_COUNT-(i+j)));
    }
    }
    }
    }
    System.out.println(System.currentTimeMillis());
    }
      

  13.   

    public static void main(String args[]){
    System.out.println(System.currentTimeMillis());
    for(int i=0;i<34;i++){
    for(int j=0;j<51;j++){
    if(((HORSE_COUNT-(i+j)) % 2) ==0){
    if((i*3 + j*2 +(HORSE_COUNT-(i+j)) /2)==RICE_NUMBER){
    System.out.println("大马"+i+" 小马:"+j+" 小马仔:"+(HORSE_COUNT-(i+j)));
    }
    }
    }
    }
    System.out.println(System.currentTimeMillis());
    }
      

  14.   

    请教一下为什么条件是 HORSE_NUMBER / 3 + 1,HORSE_NUMBER / 2 + 1),为什么要加1
      

  15.   

    请教一下为什么条件是 HORSE_NUMBER / 3 + 1,HORSE_NUMBER / 2 + 1),为什么要加1理论上的极值,100/3 ,100/2
      

  16.   

    不是bigHorseNumber <=  HORSE_NUMBER / 3,就可以了么,+1是为什么
      

  17.   

    代码里for循环各个变量的上限可以小改一下啦,没必要都用100作为上限
      

  18.   

    请教一下为什么条件是 HORSE_NUMBER / 3 + 1,HORSE_NUMBER / 2 + 1),为什么要加1请教一下为什么条件是 HORSE_NUMBER / 3 + 1,HORSE_NUMBER / 2 + 1),为什么要加1
    个人感觉上面的代码有点小瑕疵,因为循环中应该用FOODS_NUMBER/3来算吧,这里正好两个值是一样的。
    条件设置成FOODS_NUMBER/3+1是因为大马驮食物的数量不能大于食物的总数。加1是为了保证不漏掉一次循环,因为100/3的话是33.333,但是会直接取33次,加1到34次保证不会漏掉。
      

  19.   

    //x + y + z = 100 -> 4x+4y=400-4z ----|
    //3x + 2y +z/2 = 100 -> 6x+4y=200-z --|-->2x =-200+ 3z
    public class Horse
    {
        public static void main(String[] args)
        {
            int x = 0;
            int y = 0;
            System.out.println("大\t小\t幼");
            for(int z = 2 ; z <= 100 ;z+=2){
                x = (-200+3*z)/2;
                y = 100 -x -z;
                if(x < 0 || y < 0){
                    continue;
                }
                System.out.println(x+"\t"+y+"\t"+z);
            }
        }
    }
    ---------------------------
    大 小 幼
    2 30 68
    5 25 70
    8 20 72
    11 15 74
    14 10 76
    17 5 78
    20 0 80
      

  20.   


    for(x = 1;x<=34;x++)
    {
    for(y=1;y<=50;y++)
    {
    z = 100-x-y;
    if(z%2 = =0&&3x+2y+z/2=100)
    {
    System.out.print(x,y,z);
    }
    }
    }
      

  21.   


    快来围观被大神!
    公式:
    3x + 2y + z/2 = 100
    x + y +  z = 100
    z%2 = 0
    化简得:
    5x + 3y = 100
    z % 2 = 0public class CalculateHorses { public static void main(String[] args) { for(int x = 0; x <= 20; x++) {
    int t = 100 - 5 * x;
    if(t%3 == 0) {
    int y = t/3;
    int z = 100 - x - y;
    if(z%2 == 0) {
    System.out.println(x + ", " + y + ", " + z);
    }
    }
    }
    }
    }
      

  22.   


        public static void main(String[] args) {
           int x=0;//大
           int y=0;//中
           int z=0;//小
           while(true){//先假设都是大的
               if(3*x>100){
                   break;
               }
               x++;
           }
           while(true){
               x--;//每次减一个大的,判断中跟小,如果中和小能匹配出3x+2y+0.5z=100&&x+y+z=100;结束
               y=0;//剩下的中跟小的和是100-x假设中=0;小=100-x然后循环y++,z--.出结果就打印
               z=100-x;
               while(true){           
                   if((3*x+2*y+0.5*z)==100 && (x+y+z)==100){
                       System.out.println(x+","+y+","+z);
                   }
                   if(z==0){
                       break;
                   }
                   y++;
                   z--;
               }
               if(x==0){
                   break;
               }
           }
        }
      

  23.   


    public class helloworld {

    public  static void main(String args[]) {
         
     for(int x=0; x<100; x++)
     for(int y = 0; y<100; y++)
     for(int z=0; z<100; z++)
     {
     if((x+y+z==100)&&(3*x+2*y+z/2==100)&&(z%2==0))
     {
     System.out.println("x: "+x+"\ny: "+y+"\nz: "+z);
     }
     
     }
     

    }

    }
    x: 2
    y: 30
    z: 68
    x: 5
    y: 25
    z: 70
    x: 8
    y: 20
    z: 72
    x: 11
    y: 15
    z: 74
    x: 14
    y: 10
    z: 76
    x: 17
    y: 5
    z: 78
    x: 20
    y: 0
    z: 80
    我这个好复杂最简单的想法