整数搜索之基于s的双和数组
问题描述:
把一个偶数2s分解为6个互不相等的正整数a,b,c,d,e,f之和,然后把这6个正整数分成两个三元组(a,b,c)与(d,e,f) ,若这两组数具有以下两个相等特性:
则把数组(a,b,c)与(d,e,f)称为基于s 的双和数组。约定:a<b<c, d<e<f, a<d。
输入正整数s(10<s<1000),搜索并输出基于s 的所有双和数组。
注:分式化成 d*e*f*(b*c+c*a+a*b)=a*b*c*(e*f+f*d+d*e) 。
思想方法:
(1)设置枚举a,b,d,e的循环。
(2)注意到a+b+c=s,且a<b<c, 因而a,b循环取值为:
a: 1~(s-3)/3(因b比a至少大1, c比a至少大2);
b: a+1~(s-a-1)/2(因c比b至少大1);
c=s-a-b
d: a+1 ~(s-3)/3(因d>a,e比d至少大1, f比d至少大2);
e: d+1~(s-d-1)/2(因f比e至少大1);
f=s-d-e
具体实现:
#include<stdio.h>
#include<math.h>
int main()
{
double a, b, c, d, e<