wayne 发表于 2010-6-11 15:12:13

还望能给出这个题的一个Haskell程序,

我好学习学习

无心人 发表于 2010-6-12 10:01:16

:lol

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 =

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 1) /= (digit n 2)) && ((digit n 2) /= (digit n 0)))

result = [(x, y, x + y)|a<-, b<-d9\\, c<-d9\\, let x = v a b c,
                           d<-\\, e<-d9\\, f<-d9\\, let y = v d e f,
                           isRight (x + y) ]

main = do
            print \$ zip 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

:Q:少了a=1的解,不知道为什么

无心人 发表于 2010-6-12 15:57:38

好了 15#程序修改好了,少了个括号:dizzy:
结果如下


[(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 ( ++ l)) == 10))

〇〇 发表于 2010-6-13 09:22:50

如果把问题数据量放大 2个4位16进制数相加=第3个4位16进制数,允许数字为123456789cba,怎么快速求解?
页: 1 [2] 3 4 5 6
查看完整版本: 趣味题