您的位置:首页 > 其它

枚举(例题:完美立方)

2017-07-10 12:59 190 查看
枚举:基于逐个尝试答案的一种问题求解策略
 
例如:求小于N的最大素数
找不到一个数学公式能够把所有素数都给找出来
所以,小于N一个一个地找
于是就是枚举

例题:
描述 
a的立方 = b的立方 + c的立方 + d的立方为完美立方等式。例如12的立方
=6的立方 + 8的立方 + 10的立方 。编写一个程序,对任给的正整数N (N≤100),

 寻找所有的四元组(a, b, c, d),使得a的立方 = b的立方 + c的立方 + d的立方,其中a,b,c,d大于 1,
小于等于N。 
输入 
正整数N (N≤100) 
输出 
每行输出一个完美立方,按照a的值,从小到大依次输出。当两个完美立方等式中a的值相同,
则依次按照b、c、d进行非降升序排列输出,即b值小的先输出、然后c值小的先输出、然后d值小的先输出。 
样例输入 
24
样例输出 
Cube= 6, Triple = (3,4,5) 

Cube = 12, Triple = (6,8,10) 

Cube = 18, Triple = (2,12,16) 

Cube = 18, Triple = (9,12,15) 

Cube = 19, Triple = (3,10,18) 

Cube = 20, Triple = (7,14,17) 

Cube = 24, Triple = (12,16,20)

代码:

#include<iostream>
#include<conio.h>
#include<cmath>

using namespace std;

int main(void)
{
int N = 0;
cin >> N;
for (int a = 2; a <= N; ++a)
{
for (int b = 1; b < a; b++)
{
for (int c = b; c < a; c++)
{
for (int d = c; d < a; d++)
{
if ((a*a*a) == (b*b*b + c*c*c + d*d*d))
{
cout << "Cube = " << a << ", Triple = (" << b << "," << c << ", " << d << ")\n";
}
}
}
}
}
getch();
return 0;
}


转载请注明出处(虽然这也是我的笔记)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  学习笔记 算法