社区
community_281
帖子详情
某公司的一道笔试题?
xd_lzp
2001-11-04 05:36:46
12个球,从外表看上去都一样,但是有一个球和其他11个重量不同(不知道是轻还是重) 剩下的球重量一样,给一个天平,要求称3次 找出那个球. 怎样编程来实现?
...全文
363
48
打赏
收藏
某公司的一道笔试题?
12个球,从外表看上去都一样,但是有一个球和其他11个重量不同(不知道是轻还是重) 剩下的球重量一样,给一个天平,要求称3次 找出那个球. 怎样编程来实现?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
48 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
pencil_xx
2001-11-09
打赏
举报
回复
to:21bird(世纪菜鸟:不经历风雨,怎么见彩虹!
但冰箱没有好吃的。我可不去!^_^
Go_Rush
2001-11-09
打赏
举报
回复
我去测试一下szwxj(甲骨文) 的方法
chorls
2001-11-08
打赏
举报
回复
peer4(萧疯)说的很清楚了。我也是这么想的。
pencil_xx
2001-11-08
打赏
举报
回复
to:ilfsm(蜀山刀客)
(你不要这么评论别人可不可以,你自己就一定正确吗?
好好思考一下,自己笨还是别人笨
ilfsm
2001-11-08
打赏
举报
回复
一群糊涂虫~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
请注意:球是不知道轻重的。若已经知道轻重,则只要、也必须要三次才能确定该球,否则,看运气了,三次、四次都可能。
网大(http://www.netbig.com)上情话(或许是北大)版块也讨论过这个问题,答案都让我不满意。
我认为:不知道轻重的话,最多四次(运气好了三次)即可。
7680
2001-11-08
打赏
举报
回复
呵呵,有理
haitaoyu
2001-11-08
打赏
举报
回复
xd_lzp(玩命)说的非常正确!
某鸟
2001-11-08
打赏
举报
回复
另一道面试题!
把大象关进冰箱分几步?
哈哈哈...
peer4
2001-11-08
打赏
举报
回复
szwxj(甲骨文)老兄的完全正确---已经讲得很明白了.
俺开始还以为知道轻重的,惭愧惭愧.
szwxj
2001-11-08
打赏
举报
回复
to : wolfman(浪人)
你没有注意到,无论是向左偏,还是向右偏,你都可以判断出坏球的轻重,则第三次只需要用一个好球与其中的一个坏球称就可以了。
wolfman
2001-11-08
打赏
举报
回复
先说 “szwxj(甲骨文)”的方法,不对:
1.在b中,第1、2和3、4两种情况是分别等同的,甲重则乙轻,也就是说,只有三种情况,即天平朝左或右偏,或不偏。
2.只有不偏的情况(运气好)可以只需一次即可判断,否则还需两次。
再谈谈我的看法:
对于不知道该球是轻还是重的条件;
不管先分几组,前两次中都要有一次分三,有一次分四。
分三的话,运气好可以去掉2/3,运气差只能去掉1/3。
而分四的话,一定可以去掉1/2。
这样,两次以后,就剩下:运气好是1/3*1/2 为1/6,运气差为1/3;
如果剩1/6即2个的话,再有一次就行了,取其一与排出在外的球比较,不同,则该为该球,同则为另外一个。
如果是1/3即4个的话,就需要再多两次才行。
szwxj
2001-11-08
打赏
举报
回复
怎么这道题还有呀:我上初中的时候就知道这道题,我现在已经大学毕业快10年了。
第一次:4:4,有两种情况:
a、如果平,则坏球在剩下的4个中。
第二次:取剩下的2个球和称过的8个球中的2个球,2:2,也有两种情况:
a.1、如果平:则没有称过的2个球中有一个是坏的。
第三次:取称过的10个球中的1个和没有称过的2个中的一个,1:1
无论平与不平,结果我想大家已经知道了。
a.2、如果不评:则可以判断出2个中必然有一个是坏球
第三次:大家都是聪明人,我就不说了。
b、如果不平,则可以分成4个重球和4个轻球和4个好球
第二次:取2个轻球+1个重球和2个重球+1个轻球,3:3,这次要判断轻重了。
b.1、如果2个轻球+1个重球那边重,还需要称第三次吗?
b.2、如果2个重球+1个轻球那边轻,还需要称第三次吗?
b.3、如果2个轻球+1个重球那边轻,第三次还用我说么?
b.4、如果2个重球+1个轻球那边重,第三次还用我说么?
b.5、如果平了,则现在还剩下两个没有称过的球
第三次:取一个好球和剩下的两个球中的任一个,无论平与不平,结果还用我说么?
结论:虽然不知道轻重,3次足够了。
pencil_xx
2001-11-08
打赏
举报
回复
就是!
xd_lzp
2001-11-08
打赏
举报
回复
三次是肯定可以的 请大家再把我的帖子好好看看 想想
ArthurHf
2001-11-07
打赏
举报
回复
第一次
1. 称 1-4 与 5-8
1). 若平衡,所要找的球在9-12 则转到 2.1
2). 若不平衡, 所要找的球在1-8,记住重的一边,假设为1-4(5-8一样),则转到 2.2
第二次
2.1 称9-10
1) 若平衡,所要找的球在 11-12, 则转到 3.1
2) 若不平衡, 所要找的球在 9 -10 ,则转到 3.2
2.2 称 125 - 346
1) 若平衡, 所要找的球在 7 -8 ,则转到 3.3
2) 若125为重(轻)的一边, 所要找的球在125,则转到 3.4
3) 若346为重(轻)的一边,所要找的球在346,则转到 3.5
第三次
3.1 称 10- 11,
1) 若平衡, 所要找的球为 12
2) 若不平衡,所要找的球在 11
3.2 称 8 - 9
1) 若平衡, 所要找的球为 10
2) 若不平衡,所要找的球在 9
3.3) 称 6 - 7
1) 若平衡, 所要找的球为 8
2) 若不平衡,所要找的球在 7
3.4) 称 1-2
1) 若平衡, 所要找的球为 5
2) 若1重, 所要找的球在 1
3) 若2重, 所要找的球在 2
3.5) 称 3-4
1) 若平衡, 所要找的球为 6
2) 若3重, 所要找的球在 3
3) 若4重, 所要找的球在 4
zhangyan_qd
2001-11-07
打赏
举报
回复
这不叫编程,这叫用C语言表现自己的蛮力。这和直接写出解法来有什么区别?
darkmoon
2001-11-07
打赏
举报
回复
到数据算法里一查就知道了,我也问过这问题,不管多坏的情况三次都可以称出来,13个同12个
kingfish
2001-11-07
打赏
举报
回复
#include "stdio.h"
#define SUCCESS 0
#define FAIL 1
int x[13]; /* 为贴切题意 x[0] 不用 */
/* 一个异常球N与标准球比较 */
int Tzg_JudgeForLorW(int N, int Standard)
{
if(x[Standard] < x[N])
{
return 1; //N是重球
}
else
{
return 0; //N是轻球
}
}
/* 从两个球中选出异常球,已知N1重或N2轻 */
int Tzg_SeleteSBFromTwo(int N1, int N2, int Standard, int *wIsWeighter)
{
if(x[Standard] < x[N1])
{
*wIsWeighter = 1;
return N1;
}
else
{
*wIsWeighter = 0;
return N2;
}
}
int Tzg_SeleteSBFromThree(int N1, int N2, int N3, int wIsWeighter)
{
if(x[N1] == x[N2])
{
return N3;
}
else if(x[N1] > x[N2])
{
if(wIsWeighter == 1)
return N1;
else
return N2;
}
else
{
if(wIsWeighter == 1)
return N2;
else
return N1;
}
}
/***********************************************************
*函数功能 :
*输入参数 :
*输出参数 :
* wBallst 代表第几个是异常球,
* wIsWeighter 代表该异常球是重(=1)还是轻(=0)
*返回参数 :
* wWeightNum 代表称重次数
*************************************************************/
int Tzg_SeleteSecretBall(int *wBallst, int *wIsWeighter)
{
int wWeightNum =0;
if( (x[1]+x[2]+x[3]+x[4]) == (x[5]+x[6]+x[7]+x[8]) )
{ /* 意味着1--8都是标准球,异常球肯定在剩下的四个球当中 */
wWeightNum++;
if( (x[1]+x[2]+x[3]) == (x[9]+x[10]+x[11]) )
{ /* 意味着9、10、11也是标准球,异常球肯定是12 */
wWeightNum++;
*wBallst = 12;
*wIsWeighter = Tzg_JudgeForLorW(12, 1);
wWeightNum++;
return wWeightNum;
}
else if( (x[1]+x[2]+x[3]) < (x[9]+x[10]+x[11]) )
{ /* 意味着异常球在9、10、11中,且是重球*/
wWeightNum++;
*wIsWeighter = 1;
*wBallst = Tzg_SeleteSBFromThree(9,10,11,1);
wWeightNum++;
return wWeightNum;
}
else //if( (x[1]+x[2]+x[3]) > (x[9]+x[10]+x[11]) )
{ /* 意味着异常球在9、10、11中,且是轻球*/
wWeightNum++;
*wIsWeighter = 0;
*wBallst = Tzg_SeleteSBFromThree(9,10,11,0);
wWeightNum++;
return wWeightNum;
}
}
else if( (x[1]+x[2]+x[3]+x[4]) > (x[5]+x[6]+x[7]+x[8]) )
{ /* 意味着9--12都是标准球,异常球肯定在剩下的 1--8 当中 */
wWeightNum++;
if( (x[1]+x[6]+x[7]+x[8]) == (x[5]+x[10]+x[11]+x[12]) )
{ /* 说明1、5、6、7、8都是标准球,异常球在2、3、4当中,且是重球 */
wWeightNum++;
*wIsWeighter = 1;
*wBallst = Tzg_SeleteSBFromThree(2,3,4,1);
wWeightNum++;
return wWeightNum;
}
else if( (x[1]+x[6]+x[7]+x[8]) > (x[5]+x[10]+x[11]+x[12]) )
{ /* 说明1是重球 或 5 是轻球 */
wWeightNum++;
*wBallst = Tzg_SeleteSBFromTwo(1, 5, 12, wIsWeighter);
wWeightNum++;
return wWeightNum;
}
else //if( (x[1]+x[6]+x[7]+x[8]) < (x[5]+x[10]+x[11]+x[12]) )
{ /* 说明1、2、3、4、5为标准球,异常球在6、7、8中,且是轻球 */
wWeightNum++;
*wIsWeighter = 0;
*wBallst = Tzg_SeleteSBFromThree(6,7,8,0);
wWeightNum++;
return wWeightNum;
}
}
else //if( (x[1]+x[2]+x[3]+x[4]) < (x[5]+x[6]+x[7]+x[8]) )
{ /* 意味着9--12都是标准球,异常球肯定在剩下的 1--8 当中 */
wWeightNum++;
if( (x[1]+x[6]+x[7]+x[8]) == (x[5]+x[10]+x[11]+x[12]) )
{ /* 说明1、5、6、7、8都是标准球,异常球在2、3、4当中,且是轻球 */
wWeightNum++;
*wIsWeighter = 0;
*wBallst = Tzg_SeleteSBFromThree(2,3,4,0);
wWeightNum++;
return wWeightNum;
}
else if( (x[1]+x[6]+x[7]+x[8]) < (x[5]+x[10]+x[11]+x[12]) )
{ /* 说明5是重球 或 1 是轻球 */
wWeightNum++;
*wBallst = Tzg_SeleteSBFromTwo(5, 1, 12, wIsWeighter);
wWeightNum++;
return wWeightNum;
}
else //if( (x[1]+x[6]+x[7]+x[8]) > (x[5]+x[10]+x[11]+x[12]) )
{ /* 说明1、2、3、4、5为标准球,异常球在6、7、8中,且是重球 */
wWeightNum++;
*wIsWeighter = 1;
*wBallst = Tzg_SeleteSBFromThree(6,7,8,1);
wWeightNum++;
return wWeightNum;
}
}
wWeightNum = 0xff;
return wWeightNum;
}
/* 测试函数 */
main()
{
int i, wErrNum=0;
int wBallst, wIsWeighter, wWeightNum;
/* 初始化 */
for(i=1; i<13; i++)
x[i] = 2;
/* 有一重异常球的穷举 */
for(i=1; i<13; i++)
{
x[i] = 3;
wWeightNum = Tzg_SeleteSecretBall( &wBallst, &wIsWeighter );
if( (wWeightNum > 3) ¦¦ (wBallst != i) ¦¦ (wIsWeighter != 1) )
{
printf("\n\rError when the %d ball is weighter than others!", i);
wErrNum++;
}
x[i] = 2; //回复
}
/* 有一轻异常球的穷举 */
for(i=1; i<13; i++)
{
x[i] = 1;
wWeightNum = Tzg_SeleteSecretBall( &wBallst, &wIsWeighter );
if( (wWeightNum > 3) ¦¦ (wBallst != i) ¦¦ (wIsWeighter != 0) )
{
printf("\n\rError when the %d ball is lighter than others!", i);
wErrNum++;
}
x[i] = 2; //回复
}
if(wErrNum == 0)
{
printf("\n\r\n\r\n\rThe arithmatic is good !");
return SUCCESS;
}
else
{
printf("\n\r\n\r\n\rThere are all %d errors !", wErrNum);
return FAIL;
}
}
xd_lzp
2001-11-07
打赏
举报
回复
但是你这样称的次数太多了,因为不知道轻重 至少要多一次
ZengXi
2001-11-07
打赏
举报
回复
1.12球分三,每四,一边四球称之,则知轻球在三之一.(不明白?自己想吧)
2.四球分二,每二,之,得轻球在二之一.
3.还用再说吗?
赞同,不管此球是轻是重,都可以实现.
加载更多回复(28)
企业
公司
软件测试面试
笔试题
集合 软件测试面试题
某
公司
的面试试题.doc 奇虎面试题.doc 千像互动的笔试.doc 清华同方开发的面试题 (有兴趣的看一下了 !).doc 缺陷的等级划分,一个经常被问到的问题.doc 软件测试工程师笔试试题(大集合).doc 软件测试工程师测试...
android和java面试大全集
某
公司
的面试试题.doc 一个外包测试
公司
的
笔试题
!.doc 时力科技面试题.doc 合力金桥的
笔试题
.doc
一道
数据库的
笔试题
目.doc 传视数码
公司
的面试题.doc 美国英网软件
公司
题目.doc 软件测试工程师测试试题大...
2021华为 HCIE 数通 LAB 题库 版本 视频 讲解赠
笔试题
库
本课程可以帮助大家顺利通过HCIE数通方向 LAB考试,LAB版本解法视频配套讲解,讲解细致,通俗易懂,资料完整,可以帮助打开理解HCIE3.0考试的方法思路,顺利通过HCIE LAB考试。1、HCIE数通 LAB考试上午3小时考 TS排错 和 TAC诊断。 备考标准: TS在一个半小时内全部做完排出所有错点,出现象。 TAC 在 1个半小时内完成诊断的写作2、下午5小时考实验LAB备考标准: LAB 在 3个半小时内全部敲熟练出现象。自学备考达到以上标准即可参加HCIE LAB考试。课程课件附件中包含赠送的HCIE
笔试题
库、LAB拓扑解法、TS拓扑解法、TAC解法,适合自学备考HCIE LAB
大厂笔试都考什么题?超详细的笔试试题【附带解析】数据分析
那么今天,我给大家带来了一份关于数据分析岗位的
笔试题
,题目基本上还原了全部的真实考题,并附带了详细解析,希望有需要的朋友赶紧收藏起来,并仔细阅读,后续我也会不断更新其他的笔试卷子,有需要的朋友可以关注...
某知名软件
公司
的
一道
笔试题
1~100共一百个自然数,放入一个99个元素的数组a[99],要求写出一个尽量 简单的方案,找出没有被放入数组的这个数 关于答案及评论见这里
community_281
594
社区成员
254,047
社区内容
发帖
与我相关
我的任务
community_281
提出问题
复制链接
扫一扫
分享
社区描述
提出问题
其他
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章