传送门: 袁咩咩的小小博客

百钱百鸡是一个非常经典的不定方程问题,最早源于我国古代的《算经》,这是古代著名数学家张丘建首次提出的。百钱百鸡问题原文如下:

  1. 鸡翁一,值钱五,鸡母一,值钱三,鸡雏三,值钱一,百钱买白鸡,问翁、母、雏各几何?

大致的意思是,攻击5文钱一只,母鸡3文钱1只,小鸡3只1文钱,如果用100文钱买100只鸡,那么公鸡、母鸡和小鸡各应该买多少只呢?

分析

百钱买白鸡问题中,有三个变量:公鸡数量、母鸡数量、小鸡数量,分别设为x、y、z,这三者应该满足如下关系:

  1. x+y+z=100
  2. 5x+3y+z/3=100

三个变量,两个方程,因此这是一个不定方程组,这导致求解的结果不唯一。

示例代码

编写一段代码,用于计算mn鸡的问题,当m=100n=100时,正好是百钱百鸡问题。

  1. package com.example;
  2. public class Code {
  3. public static void main(String[] args) {
  4. System.out.println("百钱百鸡问题的解为:");
  5. buyChicken(100,100);
  6. }
  7. public static void buyChicken(int m,int n){
  8. for (int x = 0;x <= n;x++) //公鸡数量
  9. for (int y = 0;y <= n;y++) { //母鸡数量
  10. if (x + y <= n) { //公鸡和母鸡只和不能超过 n
  11. int z = n - x -y; //小鸡数量, 用到第一个方程 x + y + z = n
  12. if (z%3 == 0 && x*5 + y*3 + z/3 == m) {
  13. //小鸡数量必须为3的倍数, 且当第二个方程成立时, 得到正确结果
  14. System.out.println("公鸡:" + x + " 母鸡:" + y + " 小鸡:" + z);
  15. }else
  16. continue; //当结果不满足条件时, 继续下一次循环
  17. }else
  18. break; //当公鸡和母鸡数超过 n 时, 退出当前循环
  19. }
  20. }
  21. }

这样,我们运行程序可以得到解:

  1. 百钱百鸡问题的解为:
  2. 公鸡:0 母鸡:25 小鸡:75
  3. 公鸡:4 母鸡:18 小鸡:78
  4. 公鸡:8 母鸡:11 小鸡:81
  5. 公鸡:12 母鸡:4 小鸡:84

这里我采用了穷举的方法,将所有的值进行穷举,寻找方程组的解。

java - 百钱百鸡小算法的更多相关文章

  1. #Java编程题-百钱百鸡

    问题: 百钱百鸡问题.用100钱买100只鸡,公鸡一只五钱,母鸡一只三钱,雏鸡三只一钱,编程计算共有几种买法(要求每种鸡至少要买1只). 自己的实现,没有什么数据结构,算法,求大神指点!! packa ...

  2. SDUST 软件工程2016-作业4-A 百钱买鸡问题

    解决百钱买鸡问题原本并不困难,关键的是这道题对其进行了升级,测试数据太大,传统的解法,像三重循环,二重循环都会导致超时. 这道题正确的解法应该是结合数学方程进行化简,将其转化为1层循环: x+y+z= ...

  3. 百钱白鸡(for循环的练习)

    <!doctype html> <html> <head> <meta charset="utf-8"> <title> ...

  4. C++扬帆远航——4(百钱百鸡)

    /* * Copyright (c) 2016,烟台大学计算机与控制工程学院 * All rights reserved. * 文件名:baiji.cpp * 作者:常轩 * 完成日期:2016年3月 ...

  5. SYCOJ2205超级百钱百鸡

    题目-超级百钱百鸡 (shiyancang.cn) 百钱百鸡的加强版 百钱百鸡的话,因为是有范围,所以挨个挨个尝试即可,确定两个,即可确定第三个. 超级百钱百鸡,通过题目的描述,最后可以得到一个二元的 ...

  6. 百钱百鸡小游戏PHP代码

    <?php // 计算小鸡的数量 $count=[]; // 第一个for循环计算公鸡 for ($gj=1;$gj<(100/5);$gj++){ // 第二个for循环计算母鸡 for ...

  7. 百鸡百钱===百马百担====for循环嵌套

    package com.zuoye.test;//百鸡百钱5文钱可以买一只公鸡,3文钱可以买一只母鸡,1文钱可以买3只雏鸡.public class Baiji { public static voi ...

  8. P1094 百钱白鸡

    题目描述 公鸡5文钱一只,母鸡3文钱一只,小鸡3只一文钱,用100文钱买100只鸡,其中公鸡,母鸡,小鸡都必须要有,问公鸡,母鸡,小鸡要买多少只刚好凑足100文钱. 输入格式 无. 输出格式 输出所有 ...

  9. 1. while循环(当循环) 2. do{}while()循环 3. switch cose(多选一) 例子:当选循环下求百鸡百钱 用 switch cose人机剪刀石头布

    1. while循环: 当选循环下求百鸡百钱:如下: 代码: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN ...

随机推荐

  1. java基础语法 List

    List:元素是有序的(怎么存的就怎么取出来,顺序不会乱),元素可以重复(角标1上有个3,角标2上也可以有个3)因为该集合体系有索引, ArrayList:底层的数据结构使用的是数组结构(数组长度是可 ...

  2. Flask上下文管理及源码刨析

    基本流程概述 - 与django相比是两种不同的实现方式. - django/tornado是通过传参数形式实现 - 而flask是通过上下文管理, 两种都可以实现,只不实现的方式不一样罢了. - 上 ...

  3. 装饰器的修复wraps,偏函数partial 以及chain

    将被装饰的函数的一些属性值赋值给 装饰器函数,最终让属性的显示更符合我们的直觉. from functools import wraps def wapper(func): @wraps(func) ...

  4. ReactNative 环境配置

    一直是从事iOS的开发,现在研究下mac环境下reatNative的环境配置: 1. 安装HomeBlew(OS系统上的一个安装包管理器,安装后可以方便后续安装包的安装.) 终端命令: ruby -e ...

  5. Ubuntu16.04安装wireshark

    Wireshark是一个非常强大的抓包工具,适用于各种场合,安装配置也简单.这里仅对在Ubuntu上的安装做介绍. 首先通过apt安装WireShark: $ sudo apt-add-reposit ...

  6. bzoj1610 / P2665 [USACO08FEB]连线游戏Game of Lines

    P2665 [USACO08FEB]连线游戏Game of Lines 第一次写快读没判负数....(捂脸) 暴力$O(n^2)$求斜率,排序判重. 注意垂直方向的直线要特判. end. #inclu ...

  7. 20145221 《Java程序设计》第六周学习总结

    20145221 <Java程序设计>第六周学习总结 教材学习内容总结 第十一章部分 - 输入与输出 文件的读写 网络上传数据的基础 同样要先掌握父类中方法,核心类如下: 以上则是老师提出 ...

  8. Java静态内存与动态内存分配的解析

    1. 静态内存 静态内存是指在程序开始运行时由编译器分配的内存,它的分配是在程序开始编译时完成的,不占用CPU资源. 程序中的各种变量,在编译时系统已经为其分配了所需的内存空间,当该变量在作用域内使用 ...

  9. git squash 和 git rebase

    In git, what is the difference between merge --squash and rebase? 上面链接的回答中的总结: Both git merge --squa ...

  10. Mac下配置Hive环境

    在配置Hive环境之前,需要Hadoop环境. 安装Hive 点击下载 下载结束后,会有一个.tar文件,使用以下命令解压该文件. tar -zxvf 要解压的tar包 解压完成后如下 修改Hive配 ...