kdb+練習:百元買百雞問題

本文探讨了一道经典的数学问题——如何用100元购买公鸡、母鸡和小鸡,使得钱刚好花完,同时给出了详细的解决方案。通过列举所有可能的组合,筛选出符合条件的购买方案。

一直公鷄5元,一直母鷄3元,三隻小鷄一元。
用100元去買這三種雞,要求剛好花光這100元。
問這些組合都是什麽?

這個題可以用kdb+中的cross來解決,但是換一種方法來解決

male: 1+til 20
female: 1+til 34
chick: 1+til 300

先看公鷄和母鷄的組合:

f1:{[ma;fe] ma {x,y,(5*x)+3*y}\: fe}

公鷄和母鷄的組合結果與小鷄的組合:

f2:{[ch;mafe] ch {x,y,(x%3)+y}\: mafe}

把公鷄,母鷄,小鷄組合起來:

raze f2[chick;]each raze f1[male;]each female
q)raze f2[chick;]each raze f1[male;]each female
1  1 1 8.333333
2  1 1 8.666667
3  1 1 9f      
4  1 1 9.333333
5  1 1 9.666667
6  1 1 10f     
7  1 1 10.33333
8  1 1 10.66667
9  1 1 11f     
10 1 1 11.33333
11 1 1 11.66667
12 1 1 12f     
13 1 1 12.33333
14 1 1 12.66667
15 1 1 13f     
16 1 1 13.33333
17 1 1 13.66667
18 1 1 14f     
19 1 1 14.33333
20 1 1 14.66667
21 1 1 15f     
22 1 1 15.33333
..

例如第三行:三隻小鷄+一隻公鷄+一隻母鷄 = 3/3 + 51 + 31 = 9

現在要找出花費等於100的組合:

ls:raze f2[chick;]each raze f1[male;]each female
ls where 100=ls[;3]
q)ls where 100=ls[;3]
276 1  1 100f
261 2  1 100f
246 3  1 100f
231 4  1 100f
216 5  1 100f
201 6  1 100f
186 7  1 100f
171 8  1 100f
156 9  1 100f
141 10 1 100f
126 11 1 100f
111 12 1 100f
96  13 1 100f
81  14 1 100f
66  15 1 100f
51  16 1 100f
36  17 1 100f
21  18 1 100f
6   19 1 100f
267 1  2 100f
252 2  2 100f
237 3  2 100f
..

驗證結果:
第二行: 261/3 + 2*5 + 3 = 100

不過這裏可以看出小鷄的數量已經超過100,不符合要求。

ls1:ls where 100=ls[;3]
ls1 where 100=sum each ls1[;0 1 2]
q)ls1:ls where 100=ls[;3]
q)ls1 where 100=sum each ls1[;0 1 2]
84 12 4  100f
81 8  11 100f
78 4  18 100f

最後驗證: 84/3 + 12x5 + 4x3 = 100
81/3 + 8x5 + 11x3 = 100
78/3 + 4x5 + 18x3 = 100

源码来自:https://pan.quark.cn/s/a4b39357ea24 ### 操作指南:洗衣机使用方法详解#### 1. 启动与水量设定- **使用方法**:使用者必须首先按下洗衣设备上的“启动”按键,同时依据衣物数量设定相应的“水量选择”旋钮(高、中或低水量)。这一步骤是洗衣机运行程序的开端。- **运作机制**:一旦“启动”按键被触发,洗衣设备内部的控制系统便会启动,通过感应器识别水量选择旋钮的位置,进而确定所需的水量高度。- **技术执行**:在当代洗衣设备中,这一流程一般由微处理器掌管,借助电磁阀调控进水量,直至达到指定的高度。#### 2. 进水过程- **使用说明**:启动后,洗衣设备开始进水,直至达到所选的水位(高、中或低)。- **技术参数**:水量的监测通常采用浮子式水量控制器或压力感应器来实现。当水位达到预定值时,进水阀会自动关闭,停止进水。- **使用提醒**:务必确保水龙头已开启,并检查水管连接是否牢固,以防止漏水。#### 3. 清洗过程- **使用步骤**:2秒后,洗衣设备进入清洗环节。在此期间,滚筒会执行一系列正转和反转的动作: - 正转25秒 - 暂停3秒 - 反转25秒 - 再次暂停3秒- **重复次数**:这一系列动作将重复执行5次,总耗时为280秒。- **技术关键**:清洗环节通过电机驱动滚筒旋转,利用水流冲击力和洗衣液的化学效果,清除衣物上的污垢。#### 4. 排水与甩干- **使用步骤**:清洗结束后,洗衣设备会自动进行排水,将污水排出,然后进入甩干阶段,甩干时间为30秒。- **技术应用**:排水是通过泵将水抽出洗衣设备;甩干则是通过高速旋转滚筒,利用离心力去除衣物上的水分。- **使用提醒**:...
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值