王小召
发表于 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
永恒的蓝色梦想
发表于 2019-8-3 16:19:29
本帖最后由 永恒的蓝色梦想 于 2020-8-2 19:29 编辑
for b in range(1,999):
for a in range(1, b):
c = 100 - a - b
if a * a + b * b == c * c:
print(a * b * c)
exit()
1666194196
发表于 2019-10-10 08:44:04
#include <stdio.h>
#include<math.h>
void main(){
//特殊 毕达哥拉斯三元组
//毕达哥拉斯三元组是三个自然数a < b < c组成的集合,并满足
//a2 + b2 = c2
//例如,3^2 + 4^2 = 9 + 16 = 25 = 5^2。
//有且只有一个毕达哥拉斯三元组满足 a + b + c = 1000。求这个三元组的乘积abc。
int a,b,c;
for(a=0;a<333;a++){ //a+b+c=1000 且 a<b<c 所有 a<333否则 333 + 334 +335 >1000了
for(b=a+1;b<500;b++){//如果 b>=500 c>bb+c就大于 1000了 ,所以 b<500
c = sqrt(b*b+a*a);//c=根号下 a*a+b*b
if(c*c==b*b+a*a&&a+b+c==1000){//满足两个条件 则输出....
printf("a=%d,b=%d,c=%d,a*b*c=%d",a,b,c,a*b*c);
}
}
}
}
foxiangzun
发表于 2019-11-5 20:21:33
1、这三个数实际存在,且不为 0
2、这三个数的平方数符合勾股定理
3、这三个数之和刚好 1000
刚开始考虑到用穷举法,但是如果三个数都穷举,那么算法复杂度就是 O(N3),代价太大,消耗的资源和时间都太长,所以,即使用穷举,也最好能将循环控制到最小,那么用两层循环即可,代码如下:
for i in range(1, 999) :
for j in range(1, 999) :
if (i * i + j * j == pow(1000 - i - j, 2)) and (i < j < (1000 - i - j)) :
print(i, j, 1000 - i - j)
print(i * j * (1000 - i - j))
break
来自异界的飞猪
发表于 2019-11-27 20:33:59
翅膀团 发表于 2015-7-16 22:24
#include
int a=0,b=1,c=2;
函数中的 那些判断条件实干吗的没看懂,方便给讲一讲吗{:10_256:}
guoquanli
发表于 2019-12-31 18:00:20
#include <stdio.h>
#include <stdlib.h>
#include "string.h"
int main(void)
{
for(int a = 1 ; a <= 1000; a++){
for(int b = a + 1; b <= 1000; b++){
for(int c = b+1; c <= 1000; c++){
if(a*a + b*b == c*c && a+b+c ==1000){
printf("a= %d|b = %d|c= %d|a*b*c = %d\n",a,b,c,a*b*c);
}
}
}
}
return 0;
}
=========================
a = 200|b = 375|c =425|a*b*c = 31875000
代号-K
发表于 2020-3-12 18:57:07
本帖最后由 代号-K 于 2020-3-12 19:01 编辑
answer:200, 375, 425
首先把方程式化简一下;
void getPythagorean(int *a, int *b)
{
int i, j;
for(i = 1; i < 334; i++)
{
for(j = 500 - i; j <500; j++)
{
if( i*j % 1000 == 0)
{
if(500 + i*j/1000 - i - j == 0)
{
*a = i;
*b = j;
return;
}
}
}
}
}
int main(int argc, char *argv[])
{
ElementTyperet;
int a;
int b;
getPythagorean(&a, &b);
printf("answer:%d, %d, %d\n",a, b, 1000 - (a + b));
return 0;
}
leon0149
发表于 2020-5-8 23:50:01
本帖最后由 leon0149 于 2020-5-8 23:52 编辑
#include <stdio.h>
#include <time.h>
int main(void)
{
clock_t start, finish;
double duration;
start = clock();
for (int i = 1; i < 300; ++i) {
for (int j = i + 1;j < 1000; ++j) {
int k = 1000 - i - j;
if (k < j)
goto here;
else{
if (i * i + j * j == k * k) {
printf("%d * %d * %d = %d\n", i, j, k, i * j * k);
finish = clock();
duration = (double )(finish - start) / CLOCKS_PER_SEC;
printf("%.3f s", duration);
return 0;
}
}
}
here:
1;
}
return 0;
}
输出结果:
200 * 375 * 425 = 31875000
0.000 s
q327363363
发表于 2020-6-1 11:06:34
for a in range(1,998):
for b in range(1,998):
for c in range(1,998):
if a**2+b**2==c**2 and a+b+c<1000:
print(a,b,c)
数据小随从
发表于 2020-6-11 20:14:56
本帖最后由 永恒的蓝色梦想 于 2020-6-30 18:02 编辑
#include<stdio.h>
#include<stdlib.h>
void main()
{
int i, j;
long result;
for (i = 1; i < 1000; i++)
{
for (j = i; (j < 1000 && j < (1000 - i - j)); j++)
{
if (i * i + j * j == (1000 - i - j)*(1000 - i - j))
{
printf("%d^2+%d^2=%d^2\n", i, j, 1000 - i - j);
printf("这三个数的乘积=%ld\n", i*j*(1000 - i - j));
break;
}
}
}
system("pause");
}
输出结果为:200^2+375^2=425^2
这三个数的乘积=31875000
xuan1788
发表于 2020-7-23 17:16:33
import time
from time import time
def main():
start = time()
print({a*b*(1000-a-b): for a in range(1, 1000//3) for b in range(500) if a**2 + b**2 == (1000-a-b)**2})
print(time() - start)
if __name__ == "__main__":
main()
{31875000: }
0.2583038806915283
583164028
发表于 2020-8-10 09:49:58
幻世伽蓝 发表于 2016-7-11 19:37
严重鄙视这种三重for循环的搞法
yhhpf
发表于 2020-8-24 15:14:51
for a in range(1,1000):
for b in range(a,1000):
if a*a+b*b == (1000-a-b)**2:
print (a*b*(1000-a-b))
break
4444567
发表于 2020-8-31 23:44:43
def bd(a,b,c):
m =
i = min(m)
j = max(m)
m.remove(i)
m.remove(j)
k = m
if (i*i + k*k == j*j):
return True
for i in range(0,1000):
for j in range(i+1,1000):
k = 1000 - i -j
if bd(i,j,k) and k>j:
print(i,j,k)
print(i*j*k)
有马_冬巳
发表于 2020-10-4 11:27:48
'''一个毕达哥拉斯三元组是一个包含三个自然数的集合,a < b < c,满足条件:a2 + b2 = c2
例如:32 + 42 = 9 + 16 = 25 = 52。
已知存在并且只存在一个毕达哥拉斯三元组满足条件 a + b + c = 1000。
找出该三元组中 abc 的乘积。'''
def pythagorean():
for a in range(1,500):
for b in range(1,500):
if a**2 + b**2 == (1000-a-b)**2:
print("该三元组是: %d,%d,%d" %(a,b,1000-a-b))
break
if a**2 + b**2 == (1000-a-b)**2:
break
start_pythagorean = time.time()
pythagorean()
time_pythagorean = time.time() - start_pythagorean
print("%f秒" %time_pythagorean)
该三元组是: 200,375,425
0.062495秒
gonorth
发表于 2020-11-5 15:41:16
def spt():
for a in range(1000):
for b in range(a , 1000):
for c in range(b, 1000):
if (a + b + c) == 1000 and ((a** 2 + b ** 2) == c ** 2) and a < b < c:
print (a , b ,c , a*b*c)
a1351468657
发表于 2021-3-6 16:47:13
#include <stdio.h>
main()
{
int a, b, c;
for (a = 1; a < 1000; a++)
{
for (b = a; b < 1000; b++)
{
c = 1000 - a - b;
if ((a * a + b * b) == c * c)
{
printf("a = %d, b = %d, c = %d", a, b, c);
break;
}
if (c <= b)
{
goto Label;
}
}
Label:continue;
}
}
a = 200, b = 375, c = 425
a * b * c = 31875000
Kuri5u
发表于 2021-5-6 23:33:40
for a in range(100,800):
for b in range(100,800):
c=1000-a-b
if c**2==a**2+b**2 and a<b<c:
print(f"{a} {b} {c} {a*b*c}")
200 375 425 31875000
卢本伟牛逼
发表于 2021-8-10 22:12:09
#include <stdio.h>
// 1、a^2 + b^2 = C^2
// 2、c = 1000 - a - b
// 极坐标化
// rcosx + rsinx = r^2
// r = 1000 / (sinx + cosx + 1) -> c(414 ~ 500)
// (a < b < c)
static count = 0;
void method1(void)
{
int a,b,c;
for(c = 414; c <= 500; c++)
{//a + b =1000 - c
for(a = 1; a < b; a++)
{
count += 1;
b = 1000 - c - a;
if (a*a + b*b == c*c){
printf("method1 result:\n");
printf("a = %d, b = %d, c = %d\n", a,b,c);
printf("count = %d\n", count);
return;
}
}
}
printf("Can't' find~\n'");
}
void method2(void)
{
int a,b,c;
for(c = 1;c<1000;c++){
for(a = 1;a<b;a++){
count += 1;
b = 1000 - c - a;
if (a*a + b*b == c*c){
printf("method1 result:\n");
printf("a = %d, b = %d, c = %d\n", a,b,c);
printf("count = %d\n", count);
return;
}
}
}
printf("Can't' find~\n'");
}
int main(void)
{
method1();
method2();
return 0;
}
//method1 - count = 3393, a = 200, b = 375, c = 425;
//method2 - count = 167004, a = 200, b = 375, c = 425;
{:10_256:}