已知两个1~30之间的数,甲知道两数之和,乙知道两数之积。

已知两个1~30之间的数,甲知道两数之和,乙知道两数之积。
甲问乙:“你知道是哪两个数吗?”乙说:“不知道”;
乙问甲:“你知道是哪两个数吗?”甲说:“也不知道”;
于是,乙说:“那我知道了”;
随后甲也说:“那我也知道了”;

这两个数是多少?

这是一个排列组合题,我使用的是Python来计算,

# coding:utf8
# 作者:王章涛
# 时间:2018年3月31日

# 得到1-30两个数和与积的字典及其可能的组合
count_dict = {}
mult_dict = {}
for x in range(1,30):
    for y in  range(x,30):
        count = x + y
        mult = x *  y
        item = (x,y)
        if count_dict.get(count):
            count_dict.get(count).append( item )
        else:
            count_dict[ count ] = [ item ]

        if mult_dict.get( mult ):
            mult_dict.get( mult ).append( item )
        else:
            mult_dict[ mult ] = [ item ]
print "和的字典集为count_dict: ", count_dict
print "积的字典积为mult_dict: ", mult_dict

#甲问乙,乙回答说不知道,说明,通过乙得到的积可以推出两种或两种以上的组合
# 乙得到的积德集合可能为
mult_list = [ mult for mult in mult_dict if mult_dict[mult].__len__() > 1  ]  # 通过积的字典得到的可能集合数大于1
print "乙可能得到得积mult_list:",mult_list

# 乙问甲,甲回答说不知道,说明,甲通过和可以得到至少有两组组合的积在乙可能得到的集合中
def count_mult( count_list ):
    count_list_shai = []
    for count in count_list:
        count_shai = [ ( item1,item2 )  for item1,item2 in count_dict[ count ] if item1 * item2 in mult_list ]
        if count_shai.__len__() > 1:
            count_list_shai.append( count )
    return count_list_shai
count_list = count_mult( count_dict.keys() )
print "甲可能得到的和为count_list:", count_list

#紧接着,乙说知道数组了,说明,通过乙的积只有一组集合推导出的和符合甲的要求,所以乙才可以猜出结果,所以
def mult_count( mult_list ):
    mult_list_shai = []
    for mult in mult_list:
        mult_shai = [ (item1, item2 ) for item1,item2 in mult_dict[ mult ] if item1 + item2 in count_list ]
        if mult_shai.__len__() == 1:
            mult_list_shai.append( mult )
    return mult_list_shai
mult_result = mult_count( mult_list )
print "积应该为mult_result:", mult_result

#由积推导出可能的集合
num_result = [ ( item1 , item2 ) for mult in mult_result  for item1,item2 in mult_dict[ mult ] if item1 + item2 in count_list ]
count_result = [ item1 + item2 for item1 , item2 in num_result ]  # 由集合推导出可能的和
print "和应该为count:", count_result
print "两个数的数组集应该为", num_result

#最后甲也说我也知道了,这个条件我不知道有没有用了,输出的结果就是

和的字典集为count_dict:  {2: [(1, 1)], 3: [(1, 2)], 4: [(1, 3), (2, 2)], 5: [(1, 4), (2, 3)], 6: [(1, 5), (2, 4), (3, 3)], 7: [(1, 6), (2, 5), (3, 4)], 8: [(1, 7), (2, 6), (3, 5), (4, 4)], 9: [(1, 8), (2, 7), (3, 6), (4, 5)], 10: [(1, 9), (2, 8), (3, 7), (4, 6), (5, 5)], 11: [(1, 10), (2, 9), (3, 8), (4, 7), (5, 6)], 12: [(1, 11), (2, 10), (3, 9), (4, 8), (5, 7), (6, 6)], 13: [(1, 12), (2, 11), (3, 10), (4, 9), (5, 8), (6, 7)], 14: [(1, 13), (2, 12), (3, 11), (4, 10), (5, 9), (6, 8), (7, 7)], 15: [(1, 14), (2, 13), (3, 12), (4, 11), (5, 10), (6, 9), (7, 8)], 16: [(1, 15), (2, 14), (3, 13), (4, 12), (5, 11), (6, 10), (7, 9), (8, 8)], 17: [(1, 16), (2, 15), (3, 14), (4, 13), (5, 12), (6, 11), (7, 10), (8, 9)], 18: [(1, 17), (2, 16), (3, 15), (4, 14), (5, 13), (6, 12), (7, 11), (8, 10), (9, 9)], 19: [(1, 18), (2, 17), (3, 16), (4, 15), (5, 14), (6, 13), (7, 12), (8, 11), (9, 10)], 20: [(1, 19), (2, 18), (3, 17), (4, 16), (5, 15), (6, 14), (7, 13), (8, 12), (9, 11), (10, 10)], 21: [(1, 20), (2, 19), (3, 18), (4, 17), (5, 16), (6, 15), (7, 14), (8, 13), (9, 12), (10, 11)], 22: [(1, 21), (2, 20), (3, 19), (4, 18), (5, 17), (6, 16), (7, 15), (8, 14), (9, 13), (10, 12), (11, 11)], 23: [(1, 22), (2, 21), (3, 20), (4, 19), (5, 18), (6, 17), (7, 16), (8, 15), (9, 14), (10, 13), (11, 12)], 24: [(1, 23), (2, 22), (3, 21), (4, 20), (5, 19), (6, 18), (7, 17), (8, 16), (9, 15), (10, 14), (11, 13), (12, 12)], 25: [(1, 24), (2, 23), (3, 22), (4, 21), (5, 20), (6, 19), (7, 18), (8, 17), (9, 16), (10, 15), (11, 14), (12, 13)], 26: [(1, 25), (2, 24), (3, 23), (4, 22), (5, 21), (6, 20), (7, 19), (8, 18), (9, 17), (10, 16), (11, 15), (12, 14), (13, 13)], 27: [(1, 26), (2, 25), (3, 24), (4, 23), (5, 22), (6, 21), (7, 20), (8, 19), (9, 18), (10, 17), (11, 16), (12, 15), (13, 14)], 28: [(1, 27), (2, 26), (3, 25), (4, 24), (5, 23), (6, 22), (7, 21), (8, 20), (9, 19), (10, 18), (11, 17), (12, 16), (13, 15), (14, 14)], 29: [(1, 28), (2, 27), (3, 26), (4, 25), (5, 24), (6, 23), (7, 22), (8, 21), (9, 20), (10, 19), (11, 18), (12, 17), (13, 16), (14, 15)], 30: [(1, 29), (2, 28), (3, 27), (4, 26), (5, 25), (6, 24), (7, 23), (8, 22), (9, 21), (10, 20), (11, 19), (12, 18), (13, 17), (14, 16), (15, 15)], 31: [(2, 29), (3, 28), (4, 27), (5, 26), (6, 25), (7, 24), (8, 23), (9, 22), (10, 21), (11, 20), (12, 19), (13, 18), (14, 17), (15, 16)], 32: [(3, 29), (4, 28), (5, 27), (6, 26), (7, 25), (8, 24), (9, 23), (10, 22), (11, 21), (12, 20), (13, 19), (14, 18), (15, 17), (16, 16)], 33: [(4, 29), (5, 28), (6, 27), (7, 26), (8, 25), (9, 24), (10, 23), (11, 22), (12, 21), (13, 20), (14, 19), (15, 18), (16, 17)], 34: [(5, 29), (6, 28), (7, 27), (8, 26), (9, 25), (10, 24), (11, 23), (12, 22), (13, 21), (14, 20), (15, 19), (16, 18), (17, 17)], 35: [(6, 29), (7, 28), (8, 27), (9, 26), (10, 25), (11, 24), (12, 23), (13, 22), (14, 21), (15, 20), (16, 19), (17, 18)], 36: [(7, 29), (8, 28), (9, 27), (10, 26), (11, 25), (12, 24), (13, 23), (14, 22), (15, 21), (16, 20), (17, 19), (18, 18)], 37: [(8, 29), (9, 28), (10, 27), (11, 26), (12, 25), (13, 24), (14, 23), (15, 22), (16, 21), (17, 20), (18, 19)], 38: [(9, 29), (10, 28), (11, 27), (12, 26), (13, 25), (14, 24), (15, 23), (16, 22), (17, 21), (18, 20), (19, 19)], 39: [(10, 29), (11, 28), (12, 27), (13, 26), (14, 25), (15, 24), (16, 23), (17, 22), (18, 21), (19, 20)], 40: [(11, 29), (12, 28), (13, 27), (14, 26), (15, 25), (16, 24), (17, 23), (18, 22), (19, 21), (20, 20)], 41: [(12, 29), (13, 28), (14, 27), (15, 26), (16, 25), (17, 24), (18, 23), (19, 22), (20, 21)], 42: [(13, 29), (14, 28), (15, 27), (16, 26), (17, 25), (18, 24), (19, 23), (20, 22), (21, 21)], 43: [(14, 29), (15, 28), (16, 27), (17, 26), (18, 25), (19, 24), (20, 23), (21, 22)], 44: [(15, 29), (16, 28), (17, 27), (18, 26), (19, 25), (20, 24), (21, 23), (22, 22)], 45: [(16, 29), (17, 28), (18, 27), (19, 26), (20, 25), (21, 24), (22, 23)], 46: [(17, 29), (18, 28), (19, 27), (20, 26), (21, 25), (22, 24), (23, 23)], 47: [(18, 29), (19, 28), (20, 27), (21, 26), (22, 25), (23, 24)], 48: [(19, 29), (20, 28), (21, 27), (22, 26), (23, 25), (24, 24)], 49: [(20, 29), (21, 28), (22, 27), (23, 26), (24, 25)], 50: [(21, 29), (22, 28), (23, 27), (24, 26), (25, 25)], 51: [(22, 29), (23, 28), (24, 27), (25, 26)], 52: [(23, 29), (24, 28), (25, 27), (26, 26)], 53: [(24, 29), (25, 28), (26, 27)], 54: [(25, 29), (26, 28), (27, 27)], 55: [(26, 29), (27, 28)], 56: [(27, 29), (28, 28)], 57: [(28, 29)], 58: [(29, 29)]}
积的字典积为mult_dict:  {1: [(1, 1)], 2: [(1, 2)], 3: [(1, 3)], 4: [(1, 4), (2, 2)], 5: [(1, 5)], 6: [(1, 6), (2, 3)], 7: [(1, 7)], 8: [(1, 8), (2, 4)], 9: [(1, 9), (3, 3)], 10: [(1, 10), (2, 5)], 11: [(1, 11)], 12: [(1, 12), (2, 6), (3, 4)], 13: [(1, 13)], 14: [(1, 14), (2, 7)], 15: [(1, 15), (3, 5)], 16: [(1, 16), (2, 8), (4, 4)], 17: [(1, 17)], 18: [(1, 18), (2, 9), (3, 6)], 19: [(1, 19)], 20: [(1, 20), (2, 10), (4, 5)], 21: [(1, 21), (3, 7)], 22: [(1, 22), (2, 11)], 23: [(1, 23)], 24: [(1, 24), (2, 12), (3, 8), (4, 6)], 25: [(1, 25), (5, 5)], 26: [(1, 26), (2, 13)], 27: [(1, 27), (3, 9)], 28: [(1, 28), (2, 14), (4, 7)], 29: [(1, 29)], 30: [(2, 15), (3, 10), (5, 6)], 32: [(2, 16), (4, 8)], 33: [(3, 11)], 34: [(2, 17)], 35: [(5, 7)], 36: [(2, 18), (3, 12), (4, 9), (6, 6)], 38: [(2, 19)], 39: [(3, 13)], 40: [(2, 20), (4, 10), (5, 8)], 42: [(2, 21), (3, 14), (6, 7)], 44: [(2, 22), (4, 11)], 45: [(3, 15), (5, 9)], 46: [(2, 23)], 48: [(2, 24), (3, 16), (4, 12), (6, 8)], 49: [(7, 7)], 50: [(2, 25), (5, 10)], 51: [(3, 17)], 52: [(2, 26), (4, 13)], 54: [(2, 27), (3, 18), (6, 9)], 55: [(5, 11)], 56: [(2, 28), (4, 14), (7, 8)], 57: [(3, 19)], 58: [(2, 29)], 60: [(3, 20), (4, 15), (5, 12), (6, 10)], 522: [(18, 29)], 63: [(3, 21), (7, 9)], 64: [(4, 16), (8, 8)], 65: [(5, 13)], 66: [(3, 22), (6, 11)], 68: [(4, 17)], 69: [(3, 23)], 70: [(5, 14), (7, 10)], 72: [(3, 24), (4, 18), (6, 12), (8, 9)], 75: [(3, 25), (5, 15)], 76: [(4, 19)], 77: [(7, 11)], 78: [(3, 26), (6, 13)], 525: [(21, 25)], 80: [(4, 20), (5, 16), (8, 10)], 81: [(3, 27), (9, 9)], 594: [(22, 27)], 84: [(3, 28), (4, 21), (6, 14), (7, 12)], 85: [(5, 17)], 598: [(23, 26)], 87: [(3, 29)], 88: [(4, 22), (8, 11)], 90: [(5, 18), (6, 15), (9, 10)], 91: [(7, 13)], 92: [(4, 23)], 95: [(5, 19)], 96: [(4, 24), (6, 16), (8, 12)], 609: [(21, 29)], 98: [(7, 14)], 99: [(9, 11)], 100: [(4, 25), (5, 20), (10, 10)], 102: [(6, 17)], 529: [(23, 23)], 104: [(4, 26), (8, 13)], 105: [(5, 21), (7, 15)], 108: [(4, 27), (6, 18), (9, 12)], 621: [(23, 27)], 110: [(5, 22), (10, 11)], 112: [(4, 28), (7, 16), (8, 14)], 616: [(22, 28)], 114: [(6, 19)], 115: [(5, 23)], 116: [(4, 29)], 117: [(9, 13)], 119: [(7, 17)], 120: [(5, 24), (6, 20), (8, 15), (10, 12)], 121: [(11, 11)], 125: [(5, 25)], 126: [(6, 21), (7, 18), (9, 14)], 128: [(8, 16)], 130: [(5, 26), (10, 13)], 132: [(6, 22), (11, 12)], 133: [(7, 19)], 135: [(5, 27), (9, 15)], 136: [(8, 17)], 138: [(6, 23)], 140: [(5, 28), (7, 20), (10, 14)], 143: [(11, 13)], 144: [(6, 24), (8, 18), (9, 16), (12, 12)], 145: [(5, 29)], 147: [(7, 21)], 600: [(24, 25)], 150: [(6, 25), (10, 15)], 152: [(8, 19)], 153: [(9, 17)], 154: [(7, 22), (11, 14)], 667: [(23, 29)], 156: [(6, 26), (12, 13)], 160: [(8, 20), (10, 16)], 161: [(7, 23)], 162: [(6, 27), (9, 18)], 675: [(25, 27)], 676: [(26, 26)], 165: [(11, 15)], 625: [(25, 25)], 168: [(6, 28), (7, 24), (8, 21), (12, 14)], 169: [(13, 13)], 170: [(10, 17)], 171: [(9, 19)], 174: [(6, 29)], 175: [(7, 25)], 176: [(8, 22), (11, 16)], 180: [(9, 20), (10, 18), (12, 15)], 182: [(7, 26), (13, 14)], 184: [(8, 23)], 187: [(11, 17)], 700: [(25, 28)], 189: [(7, 27), (9, 21)], 190: [(10, 19)], 192: [(8, 24), (12, 16)], 195: [(13, 15)], 196: [(7, 28), (14, 14)], 198: [(9, 22), (11, 18)], 200: [(8, 25), (10, 20)], 203: [(7, 29)], 204: [(12, 17)], 546: [(21, 26)], 207: [(9, 23)], 208: [(8, 26), (13, 16)], 209: [(11, 19)], 210: [(10, 21), (14, 15)], 725: [(25, 29)], 540: [(20, 27)], 216: [(8, 27), (9, 24), (12, 18)], 729: [(27, 27)], 220: [(10, 22), (11, 20)], 221: [(13, 17)], 224: [(8, 28), (14, 16)], 225: [(9, 25), (15, 15)], 228: [(12, 19)], 550: [(22, 25)], 230: [(10, 23)], 231: [(11, 21)], 232: [(8, 29)], 234: [(9, 26), (13, 18)], 551: [(19, 29)], 238: [(14, 17)], 240: [(10, 24), (12, 20), (15, 16)], 552: [(23, 24)], 242: [(11, 22)], 243: [(9, 27)], 756: [(27, 28)], 638: [(22, 29)], 247: [(13, 19)], 250: [(10, 25)], 252: [(9, 28), (12, 21), (14, 18)], 253: [(11, 23)], 255: [(15, 17)], 256: [(16, 16)], 260: [(10, 26), (13, 20)], 261: [(9, 29)], 520: [(20, 26)], 264: [(11, 24), (12, 22)], 812: [(28, 29)], 266: [(14, 19)], 270: [(10, 27), (15, 18)], 783: [(27, 29)], 272: [(16, 17)], 273: [(13, 21)], 275: [(11, 25)], 276: [(12, 23)], 280: [(10, 28), (14, 20)], 644: [(23, 28)], 513: [(19, 27)], 285: [(15, 19)], 286: [(11, 26), (13, 22)], 572: [(22, 26)], 288: [(12, 24), (16, 18)], 289: [(17, 17)], 290: [(10, 29)], 294: [(14, 21)], 297: [(11, 27)], 299: [(13, 23)], 300: [(12, 25), (15, 20)], 304: [(16, 19)], 648: [(24, 27)], 306: [(17, 18)], 308: [(11, 28), (14, 22)], 312: [(12, 26), (13, 24)], 624: [(24, 26)], 315: [(15, 21)], 650: [(25, 26)], 319: [(11, 29)], 320: [(16, 20)], 322: [(14, 23)], 323: [(17, 19)], 324: [(12, 27), (18, 18)], 325: [(13, 25)], 841: [(29, 29)], 330: [(15, 22)], 567: [(21, 27)], 702: [(26, 27)], 336: [(12, 28), (14, 24), (16, 21)], 338: [(13, 26)], 340: [(17, 20)], 342: [(18, 19)], 345: [(15, 23)], 348: [(12, 29)], 350: [(14, 25)], 351: [(13, 27)], 352: [(16, 22)], 357: [(17, 21)], 360: [(15, 24), (18, 20)], 361: [(19, 19)], 364: [(13, 28), (14, 26)], 368: [(16, 23)], 374: [(17, 22)], 375: [(15, 25)], 377: [(13, 29)], 378: [(14, 27), (18, 21)], 575: [(23, 25)], 380: [(19, 20)], 384: [(16, 24)], 576: [(24, 24)], 390: [(15, 26)], 391: [(17, 23)], 392: [(14, 28)], 396: [(18, 22)], 399: [(19, 21)], 400: [(16, 25), (20, 20)], 728: [(26, 28)], 405: [(15, 27)], 406: [(14, 29)], 408: [(17, 24)], 580: [(20, 29)], 414: [(18, 23)], 416: [(16, 26)], 418: [(19, 22)], 420: [(15, 28), (20, 21)], 425: [(17, 25)], 696: [(24, 29)], 754: [(26, 29)], 432: [(16, 27), (18, 24)], 435: [(15, 29)], 437: [(19, 23)], 560: [(20, 28)], 440: [(20, 22)], 441: [(21, 21)], 442: [(17, 26)], 448: [(16, 28)], 672: [(24, 28)], 450: [(18, 25)], 456: [(19, 24)], 588: [(21, 28)], 459: [(17, 27)], 460: [(20, 23)], 462: [(21, 22)], 464: [(16, 29)], 468: [(18, 26)], 532: [(19, 28)], 475: [(19, 25)], 476: [(17, 28)], 480: [(20, 24)], 483: [(21, 23)], 484: [(22, 22)], 486: [(18, 27)], 493: [(17, 29)], 494: [(19, 26)], 500: [(20, 25)], 528: [(22, 24)], 504: [(18, 28), (21, 24)], 506: [(22, 23)], 784: [(28, 28)]}
乙可能得到得积mult_list: [4, 6, 8, 9, 10, 12, 14, 15, 16, 18, 20, 21, 22, 24, 25, 26, 27, 28, 30, 32, 36, 40, 42, 44, 45, 48, 50, 52, 54, 56, 60, 63, 64, 66, 70, 72, 75, 78, 80, 81, 84, 88, 90, 96, 100, 104, 105, 108, 110, 112, 120, 126, 130, 132, 135, 140, 144, 150, 154, 156, 160, 162, 168, 176, 180, 182, 189, 192, 196, 198, 200, 208, 210, 216, 220, 224, 225, 234, 240, 252, 260, 264, 270, 280, 286, 288, 300, 308, 312, 324, 336, 360, 364, 378, 400, 420, 432, 504]
甲可能得到的和为count_list: [5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 43]
积应该为mult_result: [4, 432]
和应该为count: [5, 43]
两个数的数组集应该为 [(1, 4), (16, 27)]





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值