毕达哥拉斯三元组是一组三个自然数,a <b <c,其中,2 + b 2 = c 2
例如,3 2 + 4 2 = 9 + 16 = 25 = 5 2.
恰好存在一个毕达哥拉斯三元组,其中a + b + c = 1000.找到产品abc.
资料来源:http://projecteuler.net/index.php?section = problem&id = 9
我试过但不知道我的代码出错了.这是我在C中的代码:
#include <math.h>
#include <stdio.h>
#include <conio.h>
void main()
{
int a=0, b=0, c=0;
int i;
for (a = 0; a<=1000; a++)
{
for (b = 0; b<=1000; b++)
{
for (c = 0; c<=1000; c++)
{
if ((a^(2) …Run Code Online (Sandbox Code Playgroud) 我刚开始学习haskell(字面意思,今晚!)而且我在理解列表推导的逻辑方面有点麻烦,更具体地说是<-运算符.了解一些Haskell的一个小例子查找长度小于10的所有元组:
ghci> let triangles = [ (a,b,c) | c <- [1..10], b <- [1..10], a <- [1..10] ]
Run Code Online (Sandbox Code Playgroud)
我最初的理解是这些都会一起增加,但在看到输出后我真的不理解这些列表的递增方法.另一个似乎让我得到的例子是:
ghci> let rightTriangles = [ (a,b,c) | c <- [1..10], b <- [1..c], a <- [1..b], a^2 + b^2 == c^2]
Run Code Online (Sandbox Code Playgroud)
我真的很感激对这些的一点解释,感谢你对我缺乏haskell情报的耐心.
给定一个斜边(c在典型的方程a*a + b*b = c*c),什么是计算所有可能的整数值的有效途径a和b,这样a < b?
注:我已经看到了c为大于1e12,从而c*c大于long.MaxValue,从我所知道的,c*c倒是可以进入decimal,但.
有没有人有任何建议让这更多lispy?
(use 'clojure.test)
(:import 'java.lang.Math)
(with-test
(defn find-triplet-product
([target] (find-triplet-product 1 1 target))
([a b target]
(let [c (Math/sqrt (+ (* a a) (* b b)))]
(let [sum (+ a b c)]
(cond
(> a target) "ERROR"
(= sum target) (reduce * (list a b (int c)))
(> sum target) (recur (inc a) 1 target)
(< sum target) (recur a (inc b) target))))))
(is (= (find-triplet-product 1000) 31875000)))
Run Code Online (Sandbox Code Playgroud) 我已经实现了一个简单的Dijkstra算法,用于在Java上查找.osm地图上的最短路径.
从.osm文件创建的图形中的路径查找效果非常好.但是,如果用户的当前位置和/或目标不是此图的节点(只是原始坐标),我们如何将这些坐标"链接"到图形以使路径查找工作?
简单直接的解决方案"找到最接近当前位置节点并绘制直线"似乎并不现实.如果我们遇到附图所示的情况怎么办?(UPD)

这里的问题是,在我们开始任何"智能"寻路算法(如Dijkstra's)之前,我们将当前位置与图形"链接",但它只是根据毕达哥拉斯定理的一个愚蠢的公式(斜边是一个斜边)来找到最近的节点.地理坐标和这个公式不是"寻路" - 它不能考虑障碍和节点类型.
换句话说 - 如果B是图中的节点,我们如何找到A和B之间的最短路径,而A不是节点?
您是否听说过此问题的其他解决方案?
在Project Euler中解决问题75时,我得到了意外的结果。我的代码确实找到了正确的解决方案,但是行为却很奇怪。
我的解决方案包括遍历毕达哥拉斯树(Barning's矩阵)直到达到周界极限,计算周界假定每个值的次数,最后计算仅发生一次的周长。我公认的不整洁但有效的代码是:
(defparameter *barning-matrixes*
'(#(1 -2 2) #(2 -1 2) #(2 -2 3)
#(1 2 2) #(2 1 2) #(2 2 3)
#(-1 2 2) #(-2 1 2) #(-2 2 3)))
(defparameter *lengths* (make-array 1500001 :initial-element 0))
(defun expand-node (n)
"Takes a primitive Pythagorean triple in a vector and traverses subsequent nodes in the the tree of primitives until perimeter > 1,500,000"
(let ((perimeter (reduce #'+ n)))
(unless (> perimeter 1500000)
(let ((next-nodes (mapcar …Run Code Online (Sandbox Code Playgroud) 我有这个代码使用一个上限变量N,它应该终止为毕达哥拉斯三元组的X和Y. 然而它只有在达到上限时才会冻结.不知道如何使用切割来阻止回溯.代码是:
is_int(0).
is_int(X) :- is_int(Y), X is Y+1.
minus(S,S,0).
minus(S,D1,D2) :- S>0, S1 is S-1, minus(S1,D1,D3), D2 is D3+1.
pythag(X,Y,Z,N) :- int_triple(X,Y,Z,N), Z*Z =:= X*X + Y*Y.
int_triple(X,Y,Z,N) :- is_int(S), minus(S,X,S1), X>0, X<N,
minus(S1,Y,Z), Y>0, Y<N.
Run Code Online (Sandbox Code Playgroud)
将被称为,例如,
?- pythag(X,Y,Z,20).
Run Code Online (Sandbox Code Playgroud) 这个问题说明:
毕达哥拉斯三元组是一组三个自然数,abc,为此,
a 2 + b 2 = c 2
例如,3 2 + 4 2 = 9 + 16 = 25 = 5 2.
恰好存在一个毕达哥拉斯三元组,其中a + b + c = 1000.找到产品abc.
我不确定它试图问你什么.我们是否试图找到然后将这些数字插入?a2 + b2 = c2a + b + c = 1000
我们的 OOP 老师给了我一个作业。尽管我的代码看起来不错,但我正面临这个问题。
我必须从用户那里获取三角形顶点的坐标,并且必须判断它是否是直角三角形。所以我简单地使用毕达哥拉斯定理来找出它,众所周知使用条件:h * h = b * b + p * p
但令人惊讶的是,这不适用于某些特定的直角三角形。这是一个这样的三角形:
顶点 A: (x, y) = (1, 3)
顶点 B: (x, y) = (1, 1)
顶点 C: (x, y) = (5, 1)
它计算完美,我通过打印计算得出了这一点,但仍然不起作用。
然后我尝试通过这种方式使用库中的sqrt()函数cmath: h = sqrt(b * b + p * p)
逻辑上是一样的,但它起作用了。
我想明白,为什么之前的方法不起作用?
这是我的代码的简化版本:
#include <iostream>
#include <cmath>
using namespace std;
class Vertex {
double x, y;
public:
void take_input(char …Run Code Online (Sandbox Code Playgroud) 我可以使用for循环找出Pythagorean三元组,如下所示:
def triplet(n): # Find all the Pythagorean triplets between 1 and n (inclusive)
for a in range(n+1):
for b in range(a):
for c in range(b):
if a*a == b*b + c*c:
print(a, b, c)
Run Code Online (Sandbox Code Playgroud)
我想使用list comprehension用一行代替它并尝试以下部分:
[a, b, c in range(n+1), range(a), range(b) if a*a == b*b + c*c]
Run Code Online (Sandbox Code Playgroud)
但是,我在结束方括号上得到语法错误.我试图使用简单的括号将列表更改为元组,但没有成功.我可以知道如何做对吗?
pythagorean ×10
math ×3
algorithm ×1
c ×1
c# ×1
c++ ×1
clojure ×1
cmath ×1
common-lisp ×1
dijkstra ×1
geospatial ×1
haskell ×1
java ×1
operators ×1
prolog ×1
python-3.x ×1
sqrt ×1