朋友发来一道面试题,有点难度,反推平均数,请高手帮忙看看!

2016-05-29 17:09:34 +08:00
 zungmou
比如两个序列

S1 = [ 6, 6, 7, 6, 8 ]
S2 = [ 8, 7, 6, 9, 6, 9, 9, 6, 9, 8 ]

S1 序列的平均数值 = 6.6
S2 序列的平均数值 = 7.7

规则:
1 、只能改变序列中最后一项的值;
2 、改变任意一个序列的最后一项时,同时更新到另外一个序列的最后一项(比如将 S1 序列最后一项改为 12 ,那么 S2 序列的最后一项也必须改为 12 )。
3 、除两个序列的最后一项必须保持同步外,其余项可随机取值。

要求:
1 、写出任意语言的代码;
2 、当序列的最后一项数值发生改变后,其数值为多少时, S1 序列的平均值小于 S2 , S1 序列的平均值等于 S2 , S1 序列的平均值大于 S2 。
3 、以解法多余 2 个或以上者优先。
4661 次点击
所在节点    程序员
21 条回复
YuJianrong
2016-05-29 17:16:30 +08:00
“你的朋友”不会这道初中 level 的数学题也就罢了,你也不会这道初中 level 的数学题也就罢了,但作为面试题贴上了求解答始终是不大好吧……
limhiaoing
2016-05-29 17:17:30 +08:00
这道数学题,不写代码也能解出来。
zungmou
2016-05-29 17:21:00 +08:00
@YuJianrong 哈哈哈哈,诚然,我只想到用循环去解,不知阁下的解法是?
purensong
2016-05-29 17:21:36 +08:00
其余项随机取值,是自然数内随机吗,请问这个随机数要给出来吗
zungmou
2016-05-29 17:22:26 +08:00
@purensong 程序里面可以自由取,代码都看到的。
zungmou
2016-05-29 17:23:03 +08:00
@limhiaoing 说说嘛,我真的只想到用循环。
limhiaoing
2016-05-29 17:31:25 +08:00
S1 = [6, 6, 7, 6, x]
S2 = [8, 7, 6, 9, 6, 9, 9, 6, 9, y]

V1 = S1 / 5 = (19 + x) / 5 = 3.8 + x / 5
V2 = S2 / 10 = (69 + y) / 10 = 6.9 + y / 10
之后就是根据 V1 == V2 , V1 < V2 和 V1 > V2 来解二元一次方程和二元一次不等式了。
kx5d62Jn1J9MjoXP
2016-05-29 17:33:09 +08:00
不知所云
purensong
2016-05-29 17:33:59 +08:00
@zungmou 那是自然数范围吗,这个还能写循环? 这个是不是有个条件,要求前面数字的变化次数最少或者在附近变化
rale
2016-05-29 17:48:18 +08:00
规则 1 和规则 3 叙述有矛盾
1 、穷举,从 0 ~ n 改变 s[-1], 找到相等点。
2 、列方程,这是一个线性方程,直接一次便可算出相等点。
找到相等点了,小于大于自然好说了。
xujif
2016-05-29 18:16:47 +08:00
v1 = s1[0:-1] = Sn * (n-1) + x / n
soratadori
2016-05-29 18:17:29 +08:00
是我没读明白题目吗,这跟小学(或初中不等式)问题有啥区别。顶多处理下不等式变号问题
kindjeff
2016-05-29 18:49:17 +08:00
看了好几遍才看懂。把规则的第三项去掉反倒能懂了,这个应该是指题目给数列是随机的吧。
wodesuck
2016-05-29 18:59:38 +08:00
@kindjeff 如果是这题意的话 LZ 的智商也太拙计了吧。。
iyangyuan
2016-05-29 19:23:45 +08:00
这。。。
a154312237
2016-05-30 02:54:58 +08:00
这是数学题吧 而且明明很简单的问题 被你描述的好复杂
不就是只可以同时改变两个序列的最后一个值且改变后两个值要相同 问什么情况下 两个序列平均值关系为 小于 /等于 /大于
我不太明白规则里 1 和 3 是什么情况 冲突了吧
msg7086
2016-05-30 08:32:06 +08:00
第一组有 5 个数,所以每个数字每次改变 1 ,会改变平均数 0.2 。
第二组有 10 个数,所以每次改变平均数 0.1 。
现在要让 S1 与 S2 相等,那么假设最后一个值是 8 + delta ,那么就有等式 6.6 + 0.2 delta = 7.7 + 0.1 delta ,求出结果即可。
不相等的话改成不等式再求值即可。
真的是中学数学的内容哦。
要是写成程序的话那就是 last(A) + (avg(B) - avg(A)) / (1 / count(A) - 1 / count(B)) 了。
yuankui
2016-05-30 09:55:17 +08:00
小雪数学题吧?
chenyg32
2016-05-30 10:14:50 +08:00
@limhiaoing 应该是一元一次? x 和 y 是相同的。

@zungmou 题意可不可以理解为这样:
输入 2 个数组 A 和 B , A 、 B 的元素个数均为任意但不为空,其中输入保证 A 和 B 的最后一项数值 L 相等,求对于给定输入下, L 的大小对 A 、 B 平均数大小的影响。
wizardoz
2016-05-30 12:59:33 +08:00
平均数是固定的,数量是固定的,那么总数已经确定了,每一个数是什么还重要吗?
所以这题不需要循环!

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/282042

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX