Problem 9
Special Pythagorean triplet
A Pythagorean triplet is a set of three natural numbers, a<b<c, for which,
a^2 + b^2 = c^2
For example, 3^2 + 4^2 = 9 +16 = 25 = 52.
There exists exactly one Pythagorean triplet for which a + b + c = 1000.
Find the product a * b * c.
特殊毕达哥拉斯三元组
毕达哥拉斯三元组由三个自然数 a < b < c 组成,并满足
a^2 + b^2 = c^2
例如,32 + 42 = 9 + 16 = 25 = 52。
有且只有一个毕达哥拉斯三元组满足 a + b + c = 1000。求这个三元组的乘积 a * b * c 。
/*
* Program 1
*
* 思路:
* 1.化简消元以上式子为二元一次方程
* 2.运用数学方法,趋近变量的取值范围
* 3.用遍历数表的形式穷举,直到得到答案为止
* 收获:
* 评价:
* 优点:
* 1.进行化简消元
* 2.在一定的范围内穷举
* 缺点:
* 1.穷举遍历,运算量大
* 2.范围还不够精确
*
*/
#define _CRT_SECURE_NO_WARNINGS
#define SUM 1000
#include <stdio.h>
/*-------------------------------------------------*/
int main()
{
unsigned int a, b;
short flag = 0;
int ret = 0;
for (a = 1; a <= SUM / 3; a++)
{
//初始化 b值
b = SUM / 2 - a + 1;
if (b < a + 1)
{
b = a + 1;
}
for (; b <=SUM; b++)
{
if (2 * (SUM - a) * (SUM - b) == SUM * SUM)
{
flag = 1;
ret = a * b * (SUM - a - b);
break;
}
}
if (flag)//找到答案,退出循环
{
break;
}
}
printf("%d\n", ret);
return 0;
}