余欲渔
发表于 2017-3-2 12:14:53
for c in range(1,500):
for a in range(1,(1000-c)//2):
b=1000-a-c
if a**2+b**2==c**2:
print(a*b*c,a,b,c)
exit()
== RESTART: C:\Users\ASUS\AppData\Local\Programs\Python\Python35-32\test.py ==
31875000 200 375 425
>>>
99592938
发表于 2017-3-14 17:23:07
import time
start = time.clock()
f=0
for a in range(0,500):
for b in range(a,500):
c=1000-a-b
if(a**2+b**2)==c**2:
print('a=%d b=%d c=%d' %(a,b,c))
f=1
break
if f:break
end = time.clock()
print("read:%f s" %(end - start))
>>>
a=200 b=375 c=425
read:0.149239 s
JonTargaryen
发表于 2017-3-28 15:53:24
本帖最后由 JonTargaryen 于 2017-3-28 16:03 编辑
200 375 425
三角形两边之和大于第三边,所以不可能有任何一个边超过周长的一半。不需要遍历到1000,只要到500就可以了
#include <stdio.h>
#define NUM 1000
int main(void)
{
int a, b, c;
for(a = 1; a < NUM / 2; a++)
{
for(b = a; b < NUM / 2; b++)
{
c = NUM - a - b;
if(c * c == a * a + b * b)
{
printf("%d %d %d\n", a, b, c);
return 0
}
}
}
return 0;
}
JonTargaryen
发表于 2017-3-28 15:57:56
JonTargaryen 发表于 2017-3-28 15:53
def main():
for a in range(500):
for b in range(a, 500):
c = 1000 - a - b
if a * a + b * b == c * c:
print(a, b, c)
return
if __name__ == "__main__":
main()
凌晨分子
发表于 2017-4-6 22:56:46
结果:
a=200, b=375, c=425, a*b*c=31875000
代码如下:
print([(a,(1000-a-c),c,a*(1000-a-c)*c) for c in range(333,500) for a in range(0,333) if a**2+(1000-a-c)**2==c**2])
思路大概是先计算了下a,b,c的大致取值范围,然后在这些范围内进行遍历,当符合a+b+c=1000和a2+b2=c2时便是找到了对应值了。
凌晨分子
发表于 2017-4-6 22:59:00
fc1735 发表于 2016-11-21 23:52
general solution
卧槽,这是汇编吗?牛!{:5_106:}
Eagle.Tong
发表于 2017-4-24 19:51:01
#求满足a<b<c,a+b+c=1000,a^2 + b^2 = c^2的a,b,c值
try:
for a in range(1,998):
for b in range(a+1,999):
c = 1000 - a -b
if (a**2 + b**2) == c**2:
raise ValueError
except ValueError:
print('a = %d,b = %d,c = %d\na*b*c = %d'%(a,b,c,a*b*c))
a = 200,b = 375,c = 425
a*b*c = 31875000
天之南
发表于 2017-4-30 23:41:59
本帖最后由 天之南 于 2017-4-30 23:43 编辑
#include<stdio.h>
int main()
{
//a+b+c=1000&a^2+b^2=c^2 ==> 2*a*b=(1000-c)^2-c^2
int a, b, c;
for (c = 500;c > 0;c--)
{
for (a = 1;a < c;a++)
{
int ab2 = (1000 - c)*(1000 - c) - c*c;
if (ab2 % (2 * a) == 0)
{
b = ab2 / (2 * a);
if (a + b + c == 1000)
{
printf("a=%d b=%d c=%d\n ", a, b, c);
return 0;
}
}
}
}
return 0;
}
a=200 b=375 c=425
天之南
发表于 2017-4-30 23:55:28
本帖最后由 天之南 于 2017-5-1 00:01 编辑
#include<stdio.h>
int main()
{
for (int a = 1;a < 500;a++)
for (int b = a;b < 500; b++)
{
int c = 1000 - a - b;
if (a*a + b*b == c*c)
{
printf("%d %d %d\n", a, b, c);
return 0;
}
}
return 0;
}
铭记太阳
发表于 2017-5-4 18:44:31
答案是 a = 200, b = 375, c = 425。
a x b x c = 31875000
其实如果是找这些勾股数还是难找的,但是因为有三者和为1000又说是唯一的,这就好找多了。
#include<stdio.h>
//本来找数是挺复杂的,但是给出 a + b + c = 1000后马上减轻好多。
int main(void)
{
int a,b,c;
for(a=1;a<1000;++a)
{
for(b=a;b<1000-a;++b)
{
c=1000-a-b;
if((a*a+b*b)==c*c)
goto Point;
}
}
Point:
printf("a = %d, b = %d, c = %d\n",a,b,c);
printf("a x b x c = %d\n",a*b*c);
return 0;
}
麦特的灰
发表于 2017-9-2 11:51:47
#找出唯一的满足a + b + c = 1000的毕达哥拉斯三元组{a, b, c}
for a in range(0,1000):
for b in range(a+1,1000):
c=1000-a-b
if(a**2+b**2==c**2 and c>b):
print("%d*%d*%d=%d"%(a,b,c,a*b*c))
BngThea
发表于 2017-9-12 13:52:18
flage = False
for a in range(10,1000,10):
for b in range(a,1000):
c = 1000 - a - b
if a * a + b * b == c * c:
print('{0}*{1} + {2}*{3} = {4}*{5}'.format(a,a,b,b,c,c))
flage = True
break
if flage:
break
zjhnz
发表于 2018-1-4 17:04:48
答案 200375 425
#include <stdio.h>
#include <math.h>
int main(void)
{
int a,b,c;
for(a=1; a<300; a++)
{
for ( b=a+1; b<1000; b++)
{
//
if((int)(sqrt(a*a+b*b))-sqrt(a*a+b*b)==0)
{ c=sqrt(a*a+b*b);
if ( a<b<c && a+b+c==1000 )
{
printf("%d%d%d \n",a,b,c);
}
}
}
}
return 0;
}
发表于 2018-3-7 22:19:18
#include<stdio.h>
int main()
{
int a=1,b,c,t;
for(c=997;;c--)
{
for(b=2;a>0;b++)
{
a=1000-b-c;
if(c*c==b*b+a*a&&0!=a)
{
if(b<a)
{
t=a;
a=b;
b=t;
}
printf("%d %d %d\n",a,b,c);
return 0;
}
}
a=1;
}
}
zzzgod
发表于 2018-6-20 20:33:15
#include <iostream>
#include <cmath>
using namespace std;
int main()
{
int a,b,c1;
double c2;
for(a=1;a<500;a++)
{
for(b=1;b<500;b++)
{
c2=sqrt(a*a+b*b);
c1=(int)sqrt(a*a+b*b);
if(c1==c2 && a+b+c1==1000)
{
cout<<"a="<<a<<endl<<"b="<<b<<endl<<"c="<<c1<<endl;
return 0;
}
}
}
}
山有扶苏啊
发表于 2018-10-14 13:05:01
for a in range(1, 1000):
for b in range(1, 1000):
if (1000-a)*(1000-b) == (1000*1000)/2:
print(a*b*(1000-a-b))
3187500
cupbbboom
发表于 2018-11-30 13:49:24
def b1():
x = 1
while x < 1000:
y = x + 1
while y < 1000:
z = 1000 - x -y
if x**2 + y**2 == z**2 :
print('x:%d\ny:%d\nz:%d'%(x,y,z))
print('x*x:%d; y*y:%d ; z*z:%d'%(x**2,y**2,z**2))
print('x + y + z == %s'%(x + y + z))
print('x*y*z=%d'%(x*y*z))
y += 1
x += 1
def b2():
for a in range(1000):
for b in range(a,1000):
c = 1000 - a- b
if a*a+b*b == c*c and c>b:
print (a*b*c)
b1 :跑了1.3秒
b2::跑了0.4秒 为什么for 得到比 while 还要快乐? 有人解释下吗{:9_241:}
愿你
发表于 2019-3-15 19:57:25
#include <stdio.h>
int main()
{
int i,j,k,sum,result;
for(i=0;i<=1000;i++)
{
for(j=i+1;j<=1000;j++)
{
for(k=j+1;k<=1000;k++)
{
sum=i+j+k;
if(sum==1000&&(i*i+j*j==k*k))
{
result=i*j*k;
printf("三元组中abc的乘积为:%d,其中a=%d;b=%d;;c=%d;",result,i,j,k);
return 0;
}
}
}
}
}
王小召
发表于 2019-4-10 14:52:33
运行结果:(200, 375, 425)
运行时间:0.37440239999999997
def get_re():
for x in range(1, 1001):
for y in range(1, 1001):
z = 1000 - x - y
if x**2 + y**2 == z**2:
return x, y, z
print(get_re())
print(time.process_time())
zero-花鸟雪月
发表于 2019-4-29 20:40:22
#毕达哥拉斯三元数组
import time
start=time.clock()
def calcu(x):
for a in range(1,x//3):
for b in range(a,x//2):
c=1000-a-b
if a*a+b*b==c*c:
return a,b,c,a*b*c
result=calcu(1000)
print(result)
end=time.clock()
print("共用了%fs"%(end-start))
(200, 375, 425, 31875000)
共用了0.043057s