2

問題文:

すべての辺が整数で、すべての辺が10以下で、周囲長が24である直角三角形を見つけます。

次の2つの解決策のうち、問題を正しく解釈し、正しい答えを与えるのはどれですか?

最初の解決策が正しくない場合、同様のシナリオでそのようなプログラミングエラーを回避するにはどうすればよいですか?

最初の解決策:

ghci> let rightTriangles = [(a, b, c) | a <- [1..10], b <- [1..10], c <- [1..10], a^2 + b^2 == c^2, a+b+c == 24]
ghci> rightTriangles
[(6,8,10),(8,6,10)]

2番目の解決策:

ghci> let rightTriangles' = [ (a,b,c) | c <- [1..10] , b <- [1..c] , a <- [1..b] , a^2 + b^2 == c^2, a+b+c == 24]
ghci> rightTriangles'
[(6,8,10)]
4

2 に答える 2

2

現状では、問題はわずかに定義されていないと思います。

「直角三角形を見つける」という最初の 4 つの単語(強調は私のもの) は、ほぼ間違いなく (6,8,10) を意味する一意の答えを示唆しています。ただし、問題の残りの部分は、(6,8,10) に合同なすべての三角形によって満たされます。そのうち (8,6,10) は確かに 1 つなので、それ自体は間違っていませんが、おそらく意図したものではありません取得するため。

これを見る別の方法は、問題が (6,8,10) が正準表現である等価クラスを定義しているということですが、問題は正準表現を明示的に要求していません (ただし、それがおそらく期待される答えであると推測できます)。したがって、2番目のソリューションを使用する必要があります)

于 2012-06-25T15:17:51.207 に答える