找回密码
 欢迎注册
楼主: 〇〇

[转载] 趣味题

[复制链接]
发表于 2010-6-11 15:12:13 | 显示全部楼层
还望能给出这个题的一个Haskell程序,

我好学习学习
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2010-6-12 10:01:16 | 显示全部楼层


Haskell是描述算法最清晰的语言之一
相对它而言,传统的C/C++程序就不太干净了,
总有些和你算法无关的东西要掺杂在里面
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
 楼主| 发表于 2010-6-12 10:16:30 | 显示全部楼层
如果把问题数据量放大 2个4位16进制数相加=第3个4位16进制数,允许值0123-fedc?怎么快速求解,我用oracle的sql要43多分钟
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2010-6-12 11:39:58 | 显示全部楼层
用haskell写个程序解这个我会,但是写个好程序就要仔细考虑下了,俺先想想
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2010-6-12 15:25:22 | 显示全部楼层
import List
  
  d9 = [1..9]

  v a b c = 100 * a + 10 * b + c
  
  digit n i = mod (div n (10^i)) 10

  isRight n l =  ((n <= 987) && (null \$ intersect l [digit n 0, digit n 1, digit n 2]) && ((digit n 0) /= (digit n 1)) && ((digit n 1) /= (digit n 2)) && ((digit n 2) /= (digit n 0)))
  
  result = [(x, y, x + y)|a<-[1..4], b<-d9\\[a], c<-d9\\[a, b], let x = v a b c,
                           d<-[a+1..9-a]\\[b, c], e<-d9\\[a, b, c, d], f<-d9\\[a, b, c, d, e], let y = v d e f,
                           isRight (x + y) [a, b, c, d, e, f, 0]]

  main = do
            print \$ zip [1..] result
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2010-6-12 15:25:56 | 显示全部楼层
[(1,(234,657,891)),(2,(234,658,892)),(3,(236,457,693)),(4,(236,458,694)),(5,(237
,456,693)),(6,(237,458,695)),(7,(237,654,891)),(8,(237,658,895)),(9,(238,456,694
)),(10,(238,457,695)),(11,(238,654,892)),(12,(238,657,895)),(13,(245,687,932)),(
14,(246,587,833)),(15,(247,586,833)),(16,(247,685,932)),(17,(254,637,891)),(18,(
254,638,892)),(19,(254,678,932)),(20,(256,437,693)),(21,(256,438,694)),(22,(256,
478,734)),(23,(257,389,646)),(24,(257,436,693)),(25,(257,438,695)),(26,(257,634,
891)),(27,(257,638,895)),(28,(258,436,694)),(29,(258,437,695)),(30,(258,476,734)
),(31,(258,634,892)),(32,(258,637,895)),(33,(258,674,932)),(34,(259,387,646)),(3
5,(274,658,932)),(36,(276,458,734)),(37,(278,456,734)),(38,(278,654,932)),(39,(2
85,647,932)),(40,(286,547,833)),(41,(287,359,646)),(42,(287,546,833)),(43,(287,6
45,932)),(44,(289,357,646)),(45,(324,567,891)),(46,(324,568,892)),(47,(325,467,7
92)),(48,(325,468,793)),(49,(325,648,973)),(50,(326,548,874)),(51,(327,465,792))
,(52,(327,468,795)),(53,(327,564,891)),(54,(327,568,895)),(55,(327,659,986)),(56
,(328,465,793)),(57,(328,467,795)),(58,(328,546,874)),(59,(328,564,892)),(60,(32
8,567,895)),(61,(328,645,973)),(62,(329,657,986)),(63,(345,628,973)),(64,(346,52
8,874)),(65,(348,526,874)),(66,(348,625,973)),(67,(357,629,986)),(68,(359,627,98
6)),(69,(364,527,891)),(70,(364,528,892)),(71,(365,427,792)),(72,(365,428,793)),
(73,(367,425,792)),(74,(367,428,795)),(75,(367,524,891)),(76,(367,528,895)),(77,
(368,425,793)),(78,(368,427,795)),(79,(368,524,892)),(80,(368,527,895))]
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2010-6-12 15:39:53 | 显示全部楼层
  少了a=1的解,不知道为什么
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2010-6-12 15:57:38 | 显示全部楼层
好了 15#程序修改好了,少了个括号
结果如下


[(1,(124,659,783)),(2,(125,739,864)),(3,(127,359,486)),(4,(127,368,495)),(5,(128
,367,495)),(6,(128,439,567)),(7,(129,357,486)),(8,(129,438,567)),(9,(129,654,783
)),(10,(129,735,864)),(11,(134,658,792)),(12,(135,729,864)),(13,(138,429,567)),(
14,(138,654,792)),(15,(139,428,567)),(16,(139,725,864)),(17,(142,596,738)),(18,(
142,695,837)),(19,(143,586,729)),(20,(145,692,837)),(21,(146,583,729)),(22,(146,
592,738)),(23,(152,487,639)),(24,(152,784,936)),(25,(154,629,783)),(26,(154,638,
792)),(27,(154,782,936)),(28,(157,329,486)),(29,(157,482,639)),(30,(158,634,792)
),(31,(159,327,486)),(32,(159,624,783)),(33,(162,387,549)),(34,(162,783,945)),(3
5,(163,782,945)),(36,(167,328,495)),(37,(167,382,549)),(38,(168,327,495)),(39,(1
73,286,459)),(40,(173,295,468)),(41,(175,293,468)),(42,(176,283,459)),(43,(182,3
67,549)),(44,(182,394,576)),(45,(182,457,639)),(46,(182,493,675)),(47,(182,754,9
36)),(48,(182,763,945)),(49,(183,276,459)),(50,(183,492,675)),(51,(183,546,729))
,(52,(183,762,945)),(53,(184,392,576)),(54,(184,752,936)),(55,(186,273,459)),(56
,(186,543,729)),(57,(187,362,549)),(58,(187,452,639)),(59,(192,384,576)),(60,(19
2,483,675)),(61,(192,546,738)),(62,(192,645,837)),(63,(193,275,468)),(64,(193,48
2,675)),(65,(194,382,576)),(66,(195,273,468)),(67,(195,642,837)),(68,(196,542,73
8)),(69,(214,569,783)),(70,(214,659,873)),(71,(215,478,693)),(72,(215,748,963)),
(73,(216,378,594)),(74,(216,738,954)),(75,(218,349,567)),(76,(218,376,594)),(77,
(218,439,657)),(78,(218,475,693)),(79,(218,736,954)),(80,(218,745,963)),(81,(219
,348,567)),(82,(219,438,657)),(83,(219,564,783)),(84,(219,654,873)),(85,(234,657
,891)),(86,(235,746,981)),(87,(236,718,954)),(88,(236,745,981)),(89,(237,654,891
)),(90,(238,419,657)),(91,(238,716,954)),(92,(239,418,657)),(93,(241,596,837)),(
94,(243,576,819)),(95,(243,675,918)),(96,(245,673,918)),(97,(245,718,963)),(98,(
245,736,981)),(99,(246,573,819)),(100,(246,591,837)),(101,(246,735,981)),(102,(2
48,319,567)),(103,(248,715,963)),(104,(249,318,567)),(105,(251,397,648)),(106,(2
54,619,873)),(107,(254,637,891)),(108,(257,391,648)),(109,(257,634,891)),(110,(2
59,614,873)),(111,(264,519,783)),(112,(269,514,783)),(113,(271,593,864)),(114,(2
71,683,954)),(115,(273,546,819)),(116,(273,591,864)),(117,(273,645,918)),(118,(2
73,681,954)),(119,(275,418,693)),(120,(275,643,918)),(121,(276,318,594)),(122,(2
76,543,819)),(123,(278,316,594)),(124,(278,415,693)),(125,(281,394,675)),(126,(2
81,673,954)),(127,(283,671,954)),(128,(284,391,675)),(129,(291,357,648)),(130,(2
91,384,675)),(131,(291,546,837)),(132,(291,573,864)),(133,(293,571,864)),(134,(2
94,381,675)),(135,(296,541,837)),(136,(297,351,648)),(137,(314,658,972)),(138,(3
17,529,846)),(139,(317,628,945)),(140,(318,627,945)),(141,(318,654,972)),(142,(3
19,527,846)),(143,(324,567,891)),(144,(324,657,981)),(145,(327,519,846)),(146,(3
27,564,891)),(147,(327,618,945)),(148,(327,654,981)),(149,(328,617,945)),(150,(3
29,517,846)),(151,(341,586,927)),(152,(342,576,918)),(153,(346,572,918)),(154,(3
46,581,927)),(155,(352,467,819)),(156,(354,618,972)),(157,(354,627,981)),(158,(3
57,462,819)),(159,(357,624,981)),(160,(358,614,972)),(161,(362,457,819)),(162,(3
64,527,891)),(163,(367,452,819)),(164,(367,524,891)),(165,(372,546,918)),(166,(3
76,542,918)),(167,(381,546,927)),(168,(386,541,927))]
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2010-6-12 16:16:50 | 显示全部楼层
15#
  isRight函数
   还可以改为下面,感觉比较清晰,比较简洁
   isRight n l =  ((n < 1000) && (length (nub ([digit n 0, digit n 1, digit n 2] ++ l)) == 10))
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
 楼主| 发表于 2010-6-13 09:22:50 | 显示全部楼层
如果把问题数据量放大 2个4位16进制数相加=第3个4位16进制数,允许数字为123456789cba,怎么快速求解?
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
您需要登录后才可以回帖 登录 | 欢迎注册

本版积分规则

小黑屋|手机版|数学研发网 ( 苏ICP备07505100号 )

GMT+8, 2024-5-18 06:32 , Processed in 0.045857 second(s), 16 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表