首页 > 其他分享 >基础题:百钱买百鸡(延伸题)

基础题:百钱买百鸡(延伸题)

时间:2023-04-23 19:33:43浏览次数:36  
标签:小孩 买百鸡 百钱 50 int 循环 money 延伸 男人

有30人,可能包括男人、女人、小孩,他们在一饭店共消费50先令,其中每个男人花3先令, 每个女人花2先令,每个小孩花1先令,求男人、女人、小孩各多少人? (此题就是换了个名词的百钱买百鸡)   这是个基础题,但是我经常学到后面忘记前面这种需要带点脑子的基础题,所以写做了一期笔记。


我总结了两个方法:
方法1:
先思考男人,女人,小孩一共可能有多少人。
男人一共有:50块钱除以3块每人, 也就是50 / 3 (向下取整)个人
女人一共有:50块钱除以2块每人, 也就是50 / 2 (向下取整)个人
小孩一共有:30个人
但是这样算,不能单靠某一种人撑满50块人数还满足刚好30人的,所以需要组合。
用循环判断,循环中会从内层开始计算可行方案,如第一次循环,男人是0个,女人是0个,小孩是30个,但是价格不满足;
进入第二层,男人0个,女人1个,小孩30个,依然不满足;以此类推。。。
一直到有一种方案同时满足人数和价格,就输出该方案。
代码如下:
private static void fun1() {
int num = 30;
int money = 50;
int man = 3;
int woman = 2;
int child = 1;

// 从男人开始循环(可行)
for (int i = 0; i <= 50 / 3; i++) {
for (int j = 0; j <= 50 / 2; j++) {
for (int k = 0; k <= 30; k++) {
if (i + j + k == num && i * 3 + j * 2 + k == money) {
System.out.println("男人有:" + i + "人,女人有:" + j + "人,小孩有:" + k + "人");
}
}
}
}

// 从小孩开始循环(可行)
// for (int i = 0; i <= 30; i++) {
// for (int j = 0; j <= 50 / 2; j++) {
// for (int k = 0; k <= 50 / 3; k++) {
// if (i + j + k == num && i + j * woman + k * man == money) {
// System.out.println("小孩有:" + i + "人,女人有:" + j + "人,男人有:" + k + "人");
// }
// }
// }
// }

// 从女人开始循环(可行)
// for (int i = 0; i <= 50 / 2; i++) {
// for (int j = 0; j <= 50 / 3; j++) {
// for (int k = 0; k <= 30; k++) {
// if (i + j + k == num && i * 2 + j * 3 + k == money) {
// System.out.println("女人有:" + i + "人,男人有:" + j + "人,小孩有:" + k + "人");
// }
// }
// }
// }
}
(经过检验,发现无论是谁在外层循环,谁在内层循环都可以,只要注意if条件人和价格对应上就可以)。

方法2:
此方法是从总人数上开始逐层递减,来判断方案的(原理和方法1大同小异,但是代码上略有不同)
依然是三层循环,(循环层数的顺序没有关系)
这里第一层循环判断男人,如果男人的数量 * 男人消费的价格 > 总金额,就代表男人已经超过上限了,以此来结束循环。第二层以此类推。
跟着思路走一遍:第一次循环,男人是0,女人是0,小孩那层判断,如果男人+女人+小孩一共30人,并且价格是50,则输出,否则进入下一层循环。
第二层,男人是0,女人是1,小孩的最大值就只能是29了。第三层,男人是0,女人是2,小孩最大值就是28。以此类推。
外层循环每增加一个人,内层循环就要减去一个人,最后最内层判断是否满足条件。
代码如下:
private static void fun2() {
int num = 30;
int money = 50;
int man = 3;
int woman = 2;
int child = 1;

for (int i = 0; i <= num; i++) {
if (i * man > money) {
continue;
}
for (int j = 0; j <= num - i; j++) {
if (j * woman + i * man > money) {
continue;
}
for (int k = 0; k <= num - i - j; k++) {
if (k * child + j * woman + i * man == money && k + j + i == num) {
System.out.println("男人有:" + i + "人,女人有:" + j + "人,小孩有:" + k + "人");
}
}
}
}
}
这两种方法运行后的结果为:

 

根据测试,方法可行。

(以后在遇到类似百钱买百鸡的题不会了就回来看看。)



 
 
 

标签:小孩,买百鸡,百钱,50,int,循环,money,延伸,男人
From: https://www.cnblogs.com/Xyer/p/17347487.html

相关文章

  • jquery validate 例子延伸--如何使用classname而不是name来验证
    可用例子一:底下内容摘自链接:http://jsfiddle.net/Nbcj9/ 可用例子二:底下内容摘自:http://jsfiddle.net/rq5ra/1/<formid="myform"><inputtype="text"name="field_1"class="num"/><br/><inputtype="te......
  • 从一维到十维,延伸至思想的一维到高维
     https://www.bilibili.com/video/BV17s4y1S7E7/?spm_id_from=333.1007.tianma.2-1-4.click&vd_source=e4991eff671e2c8b3ce1f748b6cca451https://www.bilibili.com/video/BV12x411Y7J7/?spm_id_from=autoNext&vd_source=e4991eff671e2c8b3ce1f748b6cca451  二维平面......
  • 百鸡百钱流程图与代码
    问题描述:我国古代数学家张丘建在《算经》一书中曾提出过著名的“百钱买百鸡”问题,该问题叙述如下:鸡翁一,值钱五;鸡母一,值钱三;鸡雏三,值钱一;百钱买百鸡,则翁、母、雏各几何?翻译过来,意思是公鸡一个五块钱,母鸡一个三块钱,小鸡三个一块钱,现在要用一百块钱买一百只鸡,问公鸡、母鸡、小鸡各......
  • 百钱百鸡问题
    问题描述:一只公鸡值五钱,一只母鸡值三钱,三只小鸡值一钱,现要用百钱买百鸡,公鸡,母鸡,小鸡各多少只?问题分析:设三个未知数x,y,zx+y+z=1005x+3y+z/3=100完整程序:#include<stdio.h>intmain(){ intcock,hen,chicken;  for(cock=0,cock<=20,cock++)  for(hen=0,hen<=33,h......
  • 百钱百鸡问题
    源代码#include<bits/stdc++.h>usingnamespacestd;intmain(){//百钱百鸡intcock,hen,chicken;for(cock=0;cock<=20;cock++)//控制公鸡数量for(hen=0;hen<=30;hen++)//控制母鸡数量for(chicken=0;chicken<=100;chicken++){chicken=100-cock-hen;if(5*c......
  • c语言趣味编程(1)百钱百鸡
    一、问题描述百钱买百鸡问题:公鸡五文钱一只,母鸡三文钱一只,小鸡三只一文钱,用100文钱买100只鸡,公鸡、母鸡、小鸡各买多少只二、设计思路(1)定义三个变量下x,y,z代表公鸡,母鸡,小鸡的数量;(2)令公鸡的数量从0开始加,利用嵌套循环,内层母鸡数量从0开始增加,最内层小鸡数量从0开始增加;(3)令......
  • 百钱白鸡
    中国古代数学家张丘健在他的 《算经》 中提出了一个著名的 “百钱百鸡问题” ......
  • 百钱买百鸡
      源码:#include<iostream>usingnamespacestd;intmain(){ intm,g,x;//m:母鸡,g:公鸡,x:小鸡; for(m=0;m<=33;m++) { for(g=0;g<=20;g++) { for(x=0;x<100;x++) { if(x+g+m==100&&3*m+5*g+x/3.0==100) cout<<"公鸡:"<<......
  • 百钱百鸡问题
    问题描述:公鸡5文钱一只,母鸡3文钱一只,小鸡3只一文钱,用100文钱买一百只鸡,其中公鸡,母鸡,小鸡都必须要有,问公鸡,母鸡,小鸡要买多少只刚好凑足100文钱。 问题分析:1.定义公鸡、母鸡、小鸡的数量变量2.定义数量变量和价格变量3.开始嵌套循环,最外层公鸡最少1次最多20次,第二层母鸡最少1......
  • 【LBLD】滑动窗口算法延伸:RABIN KARP 字符匹配算法
    滑动窗口算法延伸:RABINKARP字符匹配算法187.重复的DNA序列普通方法:classSolution{public:vector<string>findRepeatedDnaSequences(strings){intn=s.size();unordered_set<string>seen;unordered_set<string>res;......