Boss 直聘上沟通,对方回复
您好,可能受疫情影响,此岗位求职的人实在太多了,很难挨个面试。本着公平的原则,请允许我先出一个题,能答上的再继续沟通,可以吗?题目如下:
1 块钱可以买 3 个桃子吃,吃完后 3 个桃核可以换 1 个桃子,请问 135142857 元可以最多吃到多少个桃子。
起初用笔算了下以为 4*n,回复不对,然后 IDEA 敲下,如:
public int solution(int money) {
// money 必须>0
// money 不能超过 Integer.MAX_VALUE
int sum = 0;
// 买桃子数
int peaches = money * 3;
// 核数
int peachCore = peaches;
int exchange = 0;
// 核处理
while (peachCore / 3 >= 1) { // 说明换到了至少 1 个桃子
// 换桃子
int changPeaches = peachCore / 3;
exchange += changPeaches;
peachCore = changPeaches;
}
sum = peaches + exchange;
return sum;
}
带入结果是: 135142857 元可以吃到608142849个 bitch
再问对方,回复说: 差一点点
我: 对不起,打扰了
我想问下各位 V 友是这样算吗?(不想百度,算不出来,感觉不合适这行业)
不对的话,明天我就去送外卖去了....... :dog:
1
chaleaoch 2020-05-20 15:34:17 +08:00
你没考虑不能整除的情况啊.
|
2
pwrliang 2020-05-20 15:37:34 +08:00
private int get(int money) {
int cores = 0; int ans = 0; while (money > 0 || cores >= 3) { if (money > 0) { ans += 3; money--; cores += 3; } else { ans += cores / 3; cores = cores % 3 + cores / 3; } } return ans; } 因为桃核桃子换完了,还可以继续用来换桃子,所以你那个 while 逻辑不对的。我的答案是 608142856 |
3
kop1989 2020-05-20 15:37:35 +08:00
int changPeaches = peachCore / 3; 你这样做岂不是每次循环都会抛弃掉余数么
|
4
wroyal 2020-05-20 15:38:00 +08:00
非程序员,算出来 608142856
|
5
zqz19941106 2020-05-20 15:39:00 +08:00
之前看到的智力题 是不是有剩下 2 个 可以借一个吃完有 3 个还回一个= -
|
6
zeroking 2020-05-20 15:45:14 +08:00
少吃了 7 个,608142856
|
7
rabbbit 2020-05-20 15:46:33 +08:00
function s(money) {
let peachNum = money * 3; let coreNum = 0; let eatNum = 0; while (peachNum) { coreNum += peachNum; eatNum += peachNum; peachNum = 0; if (coreNum >= 3) { peachNum = Math.floor(coreNum / 3); coreNum = coreNum % 3; } } return eatNum; } console.log(s(135142857)); // 608142856 |
8
wangkai0351 2020-05-20 15:49:31 +08:00
可能老哥欠缺一些解算法题的套路,一旦面试中问最优情况,我首先条件反射想到贪心和动态规划。
|
9
resist 2020-05-20 15:54:13 +08:00
虽然知道怎么搞,但懒得算,哈哈哈
|
10
vessel 2020-05-20 15:55:37 +08:00
int peachs(int peach, int he) {
if (he > 0) { peach += he / 3; he %= 3; } if (he < 3 && peach == 0) { return 0; } int n_he = peach + he; return peach + peachs(0, n_he); } int main() { cout << peachs(135142857*3, 0); return 0; } 本轮没兑换完的核,可以下轮一起兑换。 写成递归比较好理解。 |
11
wroyal 2020-05-20 16:08:32 +08:00
用 excel 解决了
https://imgur.com/LYc8Wmk.jpg |
12
Vegetable 2020-05-20 16:11:38 +08:00 1
最简单的思路.能换马上换,不能换再花钱.全程加减法.慢是慢点
def peach(n): core = 0 p = 0 while n: if core >= 3: core -= 2 p += 1 continue n -= 1 core += 3 p += 3 while core >= 3: core -= 2 p += 1 return p print(peach(135142857)) # 608142856 |
13
wutiantong 2020-05-20 16:17:18 +08:00
数字改小点就是个小学奥数题了。
|
14
wutiantong 2020-05-20 16:18:04 +08:00
其实这根本就不是个需要编程运算的问题。
|
15
xiaoxinshiwo 2020-05-20 16:21:28 +08:00
|
16
dinjufen 2020-05-20 16:23:08 +08:00
const money = 135142857
let sum = 0 let he = 0 let taozi = money * 3 while (he >= 3 || taozi > 0) { sum = sum + taozi he = taozi + he taozi = Math.floor(he / 3) he = he % 3 } console.log(sum) |
17
luban 2020-05-20 16:27:29 +08:00
这个原型应该是酒瓶换酒的,需要确定的是最后桃核不够时是否可以借
假设桃肉价值 x 元,桃核价值 y 元 3*( x+y )=1,3*y = x+y ; 可以算出 x,y 的价值,再用总价除以 x 的值 |
18
Vegetable 2020-05-20 16:31:27 +08:00
|
19
goat 2020-05-20 16:34:21 +08:00 5
不就是二元一次方程组吗?
一元钱买三个桃子: 一元钱 = 3 * (桃肉 + 桃核) 三个桃核换一个桃子: 3 * 桃核 = 1 * (桃肉 + 桃核) 桃核 = 0.5 桃肉 代入第一个等式,一元钱=4.5 桃肉 135142857 * 4.5 = 608,142,856.5 小数点后舍去 |
20
zmxnv123 2020-05-20 16:49:44 +08:00
peachCore = changPeaches + peachCore % 3
|
21
cnmllll 2020-05-20 16:59:21 +08:00
# -*- coding: UTF-8 -*-
money = 135142857 #初始换到的桃子个数 peaches = 3 * money #初始核桃的总个数 hetao = peaches while hetao >= 3: #核桃能换到的桃子个数 tmp = hetao // 3 #每次剩余的核桃个数 res = hetao % 3 #换到的桃子个数+剩余的桃子个数,下次兑换 hetao = tmp + res #桃子总个数累积 peaches += tmp print(peaches) |
22
bluefalconjun 2020-05-20 17:02:22 +08:00
@goat 这个思路最好...
|
23
cnmllll 2020-05-20 17:07:02 +08:00
|
24
Marstin 2020-05-20 17:09:18 +08:00
608 142 856
这不是小时候做的奥赛题嘛(135142857-1)/2*9+4 |
25
everydiao 2020-05-20 17:37:55 +08:00
我面试其他的都还行,源码我也能大致的掰一掰,但是一设计程序题,我就要 go dead,简单的冒泡和快排还行,一旦这种长篇大论,钉钉卯卯我就等死了
|
26
lordofhollows 2020-05-20 18:05:48 +08:00
function alg(n) {
res = 0 // 吃到的桃子 x = n * 3 // 桃子数 y = 0 // 桃核数 while (x > 0 || y >= 3) { res += x // 全吃掉 y += x // 扔桃核 x = Math.floor(y / 3) // 换桃子 y = y % 3 // 剩下的桃核 } return res } alg(135142857) === 608142856 |
27
teaaa 2020-05-20 19:51:02 +08:00
这题我会,PHPer 假装加班来写一写,首先 桃子 = 桃核 这不一回事儿嘛。
$p_sum = 0; //拥有过的桃子计数 $p_now = 3 * 135142857; //当前拥有桃子数 $p_new = 3 * 135142857; //新换得的桃子数 $p_else = 0; //换完剩余的桃子数(余数) //拥有 3 个以上桃子就跑去换:) while($p_now >= 3){ $p_sum = $p_sum + $p_new; //拥有过的桃子数累加记在小本本上 $p_now = $p_new + $p_else; //抱着当前拥有的一坨桃子 $p_new = intval(floor($p_now / 3)); //跑去换来的新桃子 $p_else = $p_now%3; //剩下的旧桃子(余数) } dd($p_sum); //小本本最终结果 608142856 我好闲。 |