Swift趣味案例之百钱买百鸡

【问题描述】
   用100文钱买100只鸡,其中公鸡5文钱1只,母鸡3文钱1只,小鸡1文钱3只。问:公鸡、母鸡和小鸡各买了几只?

【设计思路】
   设公鸡、母鸡和小鸡的只数分别为x、y、z,根据题意可得如下方程组:
x + y + z = 100
5x + 3y + z / 3 = 100

如果100文钱全买公鸡,最多可买100 / 5 = 20只,所以x的取值范围在0~20之间;如果100文钱全买母鸡,最多可买100 / 3 =
33只,所以y的取值范围在0~33之间;如果100文钱全买小鸡,最多可买99只,所以z的取值范围在0~99之间,且z % 3 = 0。
   通过三重循环穷举x、y和z的值。在穷举的过程中,如果x、y和z满足上面的方程组,则得到一组符合条件的解。

【Swift编程实现】

// 百钱买百鸡
func buyOneHundredChickens1() {
   // 通过三重循环穷举x、y和z的值
   for x in 0...20 {   // 如果100文钱全买公鸡,最多可买100 / 5 = 20只,所以x的取值范围在0~20之间
       for y in 0...33 { // 如果100文钱全买母鸡,最多可买100 / 3 =
33只,所以y的取值范围在0~33之间
           for z in 0...99 where z % 3 == 0 { //
如果100文钱全买小鸡,最多可买99只,所以z的取值范围在0~99之间,且z % 3 = 0
               /*
               在穷举的过程中,如果x、y和z满足如下方程组:
               x + y + z =
100
               5x + 3y + z / 3 = 100
               则得到一组符合条件的解
               */
               if x + y + z == 100
&& 5 * x + 3 * y + z / 3 == 100 {
                   print("公鸡:\(x)只,母鸡:\(y)只,小鸡\(z)只")
               }
           }
       }
   }
}

buyOneHundredChickens1()

// 百钱买百鸡(程序改进)
func buyOneHundredChickens2() {
   //
通过二重循环穷举x、y的值
   for x in 0...20 {   // 如果100文钱全买公鸡,最多可买100 / 5 =
20只,所以x的取值范围在0~20之间
       for y in 0...33 { // 如果100文钱全买母鸡,最多可买100 / 3 =
33只,所以y的取值范围在0~33之间
           let z = 100 - x - y
           if z >=
0 && z % 3 == 0 && 5 * x + 3 * y + z / 3 == 100
{
               print("公鸡:\(x)只,母鸡:\(y)只,小鸡:\(z)只")
           }
       }
   }
}

buyOneHundredChickens2()

【运行结果】

公鸡:0只,母鸡:25只,小鸡:75只

公鸡:4只,母鸡:18只,小鸡:78只

公鸡:8只,母鸡:11只,小鸡:81只

公鸡:12只,母鸡:4只,小鸡:84只

时间: 2024-10-15 01:26:26

Swift趣味案例之百钱买百鸡的相关文章

3. 百钱买白鸡问题

这是一个古老而非常经典的问题,最早源自中国古代的算经,中国古代数学家张丘建在他的算经中提出了著名的百钱买白鸡的问题: 鸡翁1, 值钱5,鸡母1,值钱3,鸡雏3值钱1,百钱买白鸡,问翁,母,雏各几何? 100文钱买100只鸡,公鸡5文钱一只,母鸡3文一只,小鸡3只1文钱:100文钱买了100只鸡,请问公鸡,母鸡,小鸡各有多少? #include <stdio.h> #include <stdlib.h> int main() {     int i,j,k;     for(i=0;

百钱买百鸡

public class Sample1//百钱买百鸡/*鸡翁一,值钱五,鸡母一,值钱三,鸡雏三,值钱一.百钱买百鸡,问鸡翁.鸡母.鸡雏各几何?*/{ public static void main(String [] args){ int x;//可买鸡翁只数 int y;//可买鸡母只数 int z;//可买鸡雏只数 for ( x=0;x<=100/5 ;x++ ) { for ( y=0;y<=33 ;y++ ) { z=100-x-y; if (x*5+y*3+z/3==100&am

华为OJ平台——百钱买百鸡问题

题目描述: 元前五世纪,我国古代数学家张丘建在<算经>一书中提出了“百鸡问题”:鸡翁一值钱五,鸡母一值钱三,鸡雏三值钱一. 百钱买百鸡,问鸡翁.鸡母.鸡雏各几何? 思路: 这道题很简单,假设鸡翁 i 只, 鸡母 j 只, 则有 i + j + k = 100 5*i + 3*j + k/3 = 100 由以上两个等式我们可以推出: j = 25 - i * 7/4 ; k = 75 + i * 3/4 ; 由于i. j. k 必须是0或正整数,所以 i 必须是4的倍数,因此我们下面的程序中也是

百钱买百鸡:公鸡5元一只,母鸡3元一只,小鸡1元3只,问100元买100只鸡,问有多少种买法,输出每种买法的结果!

/** * 百钱买百鸡:公鸡5元一只,母鸡3元一只,小鸡1元3只,问100元买100只鸡,问有多少种买法,输出每种买法的结果! * */ public class Test3 { public static void main(String[] args) { int c = 0; for (int a = 0; a < 100; a++) { for (int b = 0; b < 100; b++) { if ((7 * a + 4 * b) == 100) { c++; System.o

PHP中百钱买百鸡

<html><head><title>百钱买百鸡</title><meta http-equiv="content-type" content="text/html;charset=utf-8"/></head><?php/*题目:公鸡一,值钱五,母鸡一,值钱三,小鸡三,值钱一.百钱买百鸡,问公鸡.母鸡.小鸡各几何?*///$g;可买公鸡数//$m;可买母鸡数//$x;可买小鸡数$coun

百钱买百鸡问题C++(穷举)

//鸡翁一,值钱五,鸡母一,值钱三,鸡雏三,值钱一,百钱买百鸡 /* 鸡翁 x 个 5x 鸡母 y 个 3y 小鸡 z 个 z/3 化简为:7*x+4*y=100 */ #include "stdafx.h" #include <iostream> using namespace std; int main() { int x, y, z; for (x = 0; x <= 100; x++) for (y = 0; y <= 100; y++) { if (7

经典算法题每日演练——第一题 百钱买百鸡

原文:经典算法题每日演练--第一题 百钱买百鸡 百钱买百鸡的问题算是一套非常经典的不定方程的问题,题目很简单:公鸡5文钱一只,母鸡3文钱一只,小鸡3只一文钱, 用100文钱买一百只鸡,其中公鸡,母鸡,小鸡都必须要有,问公鸡,母鸡,小鸡要买多少只刚好凑足100文钱. 分析:估计现在小学生都能手工推算这套题,只不过我们用计算机来推算,我们可以设公鸡为x,母鸡为y,小鸡为z,那么我们 可以得出如下的不定方程, x+y+z=100, 5x+3y+z/3=100, 下面再看看x,y,z的取值范围. 由于只

华为初级——百钱买百鸡

源程序: #include<iostream> using namespace std; int main() { for(int i=0;i<=20;i++) { for(int j=0;j<34;j++) { for(int k=0;k<=300;k=k+3) { if(i*5+j*3+k/3==100&&i+j+k==100) cout<<i<<' '<<j<<' '<<k<<end

[Algorithm]暴力破解法-百钱买百鸡

暴力破解法一般指穷举法.穷举法的基本思想是根据题目的部分条件确定答案的大致范围,并在此范围内对所有可能的情况逐一验证,直到全部情况验证完毕.若某个情况验证符合题目的全部条件,则为本问题的一个解:若全部情况验证后都不符合题目的全部条件,则本题无解.穷举法也称为枚举法. 用穷举法解题时,就是按照某种方式列举问题答案的过程.针对问题的数据类型而言,常用的列举方法一有如下三种: (1)顺序列举 是指答案范围内的各种情况很容易与自然数对应甚至就是自然数,可以按自然数的变化顺序去列举. (2)排列列举 有时