分享
 
 
 

一道微软公司的面试题目的算法实现

王朝other·作者佚名  2006-01-08
窄屏简体版  字體: |||超大  

据说属微软公司的面试题.

原题目描述:

已知两个数字为1~30的,甲知道两数只和,乙知道两数之积,甲问乙:“你知道是

那两个数吗?”乙说:“不知道”。乙问甲:“你知道是那两个数吗?”甲说:“也

不知道”。于是,乙说 :“那我知道了”随后甲也说:“那我也知道了”这两个数是'什么?

以下用VB。NET实现:

Dim NUM, SUM, PRODUCT As Int32

Dim Product1()() As Int32

Dim i, m, n, Sum1(3)() As Int32

Private Sub MyMain()

Product1 = Nothing

NUM = CInt(Me.TextBox1.Text)

GetSum1()

GetProduct1()

For m = 1 To NUM

For n = m To NUM

If SumOnly(m, n) Or ProductOnly(m, n) Then GoTo NextItem '不好意思用了个GOTO

SUM = m + n

PRODUCT = m * n

'甲的和产生的积中最多有(n -2)个是唯一积

If SUMtoPRODUCT_N_2(SUM) < 2 Then GoTo NextItem

'乙的积产生的和中有且只有一个满足1、不是唯一和 2、和产生的积中最多有(n -2)个是唯一积

'并且其余的和均满足 1、不是唯一和 2、有n-1个唯一积

If PROCUCTtoSUM(PRODUCT) Then

MsgBox(m.ToString() & " " & n.ToString())

End If

NextItem: Next

Next

End Sub

Private Sub GetSum1()

'产生唯一和并保存在数组中

ReDim Sum1(0)(1)

Sum1(0)(0) = 1

Sum1(0)(1) = 1

ReDim Sum1(1)(1)

Sum1(1)(0) = 1

Sum1(1)(1) = 2

ReDim Sum1(2)(1)

Sum1(2)(0) = NUM - 1

Sum1(2)(1) = NUM

ReDim Sum1(3)(1)

Sum1(3)(0) = NUM

Sum1(3)(1) = NUM

End Sub

Private Function SumOnly(ByVal N1 As Int32, ByVal N2 As Int32) As Boolean

'判断是否为唯一和

Dim i As Int32

For i = 0 To 3

If N1 = Sum1(i)(0) AndAlso N2 = Sum1(i)(1) Then Return True

Next

Return False

End Function

Private Sub GetProduct1()

'产生唯一积并保存在数组中

Dim tmp(NUM * NUM)() As Int32

For m = 1 To NUM '????????????????

For n = m To NUM '??????????????

Dim meme() As Int32 = tmp(m * n)

If meme Is Nothing Then

ReDim meme(2)

Else

ReDim Preserve meme(meme.Length + 1)

End If

meme(meme.Length - 1) = m

meme(meme.Length - 2) = n

meme(0) += 1

tmp(m * n) = meme

meme = Nothing

Next

Next

For i = 1 To NUM * NUM

If Not tmp(i) Is Nothing AndAlso tmp(i)(0) = 1 Then

For m = 1 To tmp(i).GetUpperBound(0) Step 2

If Product1 Is Nothing Then

ReDim Product1(0)

ReDim Product1(0)(1)

Else

ReDim Preserve Product1(Product1.Length)

ReDim Product1(Product1.Length - 1)(1)

End If

Product1(Product1.Length - 1)(0) = tmp(i)(m)

Product1(Product1.Length - 1)(1) = tmp(i)(m + 1)

Next

End If

Next

End Sub

Private Function ProductOnly(ByVal N1 As Int32, ByVal N2 As Int32) As Boolean

'判断是否为唯一积

Dim i As Int32

For i = 0 To Product1.GetUpperBound(0)

If N1 = Product1(i)(1) AndAlso N2 = Product1(i)(0) Then Return True

If N1 = Product1(i)(0) AndAlso N2 = Product1(i)(1) Then Return True

Next

Return False

End Function

Private Function SUMtoPRODUCT_N_2(ByVal SUM As Int32) As Int32

'甲的和产生的积中最多有(n -2)个是唯一积

Dim n As Int32 = CInt(SUM / 2 - 0.2)

Dim i, m As Int32

For i = 1 To n

If ProductOnly(i, SUM - i) Then m += 1

Next

Return n - m

End Function

Private Function PROCUCTtoSUM(ByVal PRODUCT As Int32) As Boolean

'乙的积产生的和中有且只有一个满足1、不是唯一和 2、和产生的积中最多有(n -2)个是唯一积

'并且其余的和均满足 1、不是唯一和 2、有n-1个唯一积

Dim tmp()(), i, m, n As Int32

'1、分解积看能产生多少个和

For i = 1 To CInt(Math.Sqrt(PRODUCT) - 0.4)

If PRODUCT Mod i = 0 Then

If tmp Is Nothing Then

ReDim tmp(0)

ReDim tmp(0)(2)

Else

ReDim Preserve tmp(tmp.Length)

ReDim Preserve tmp(tmp.Length - 1)(2)

End If

tmp(tmp.Length - 1)(2) = PRODUCT / i

tmp(tmp.Length - 1)(1) = i

If Not SumOnly(tmp(tmp.Length - 1)(1), tmp(tmp.Length - 1)(2)) And SUMtoPRODUCT_N_2(i + PRODUCT / i) >= 2 Then

'和不为唯一和,且和产生的积中支多有n-2个是唯一积

tmp(tmp.Length - 1)(0) = 1

End If

If SumOnly(tmp(tmp.Length - 1)(1), tmp(tmp.Length - 1)(2)) Then

'唯一和

tmp(tmp.Length - 1)(0) = 3

End If

If Not SumOnly(tmp(tmp.Length - 1)(1), tmp(tmp.Length - 1)(2)) And SUMtoPRODUCT_N_2(i + PRODUCT / i) = 1 Then

'不是唯一和,但是有n-1个唯一积

tmp(tmp.Length - 1)(0) = 2

End If

End If

Next

Dim count As Int32 = 0

For i = 0 To tmp.Length - 1

If tmp(i)(0) = 0 Then Return False

If tmp(i)(0) = 1 Then count += 1

Next

If count <> 1 Then Return False

Return True

End Function

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有