Problem 9 Special Pythagorean triplet
A Pythagorean triplet is a set of three natural numbers, a < b < c a < b < ca<b<c, for which,
a 2 + b 2 = c 2 \large a^2+b^2=c^2a2+b2=c2
For example,
3 2 + 4 2 = 9 + 16 = 25 = 5 2 \large 3^2+4^2=9+16=25=5^232+42=9+16=25=52
There exists exactly one Pythagorean triplet for which a + b + c = 1000 a + b + c = 1000a+b+c=1000.
Find the product a b c abcabc.
问题 9 特殊的毕达哥拉斯三元数
毕达哥拉斯三元组是一组三个自然数的集合,且 a < b < c a < b < ca<b<c,其中
a 2 + b 2 = c 2 \large a^2+b^2=c^2a2+b2=c2
例如:
3 2 + 4 2 = 9 + 16 = 25 = 5 2 \large 3^2+4^2=9+16=25=5^232+42=9+16=25=52
恰好存在一个 a + b + c = 1000 a + b + c = 1000a+b+c=1000 的毕达哥拉斯三元组,求积 a b c abcabc
解题报告
题目中提到了毕达哥拉斯三元组,我们首先理解下其数学定义
毕达哥拉斯定理
在一个边长为 a 、 b 、 c a、b、ca、b、c 的直角三角形中,a ² + b ² = c ² a²+b²=c²a²+b²=c²。理想的情况是 a 、 b 、 c a、b、ca、b、c 均为整数,则称为毕达哥拉斯三元数组
如题目中给出的例子,3 、 4 、 5 3、4、53、4、5 就符合条件
思路
根据题目叙述,我们要满足 a < b < c a < b < ca<b<c 和 a ² + b ² = c ² a²+b²=c²a²+b²=c² 的条件
那么只需要分别定义三个变量 a 、 b 、 c a、b、ca、b、c,分别给它们赋值为 1 、 2 、 3 1、2、31、2、3 并符合比较关系,用来满足第一个条件
然后从变量 c cc 开始,三层循环,最后一层中去判断 a + b + c = 1000 a + b + c = 1000a+b+c=1000 和 a ² + b ² = c ² a²+b²=c²a²+b²=c² 条件
如果满足,则输出此时的乘积即为所求
这并不是唯一的解决方案,但是是我认为比较简单,最容易理解的一种
代码实现
/* * @Author: coder-jason * @Date: 2022-04-17 13:04:36 * @LastEditTime: 2022-04-17 13:24:10 */ #include <bits/stdc++.h> using namespace std; int main() { for (int c = 3; c < 1000; c++) { for (int b = 2; b < c; b++) { for (int a = 1; a < b; a++) { if ((a + b + c == 1000) && (a * a + b * b == c * c)) { cout << a * b * c; } } } } return 0; }
答案:31875000