枚举(完美立方)

算法分析与设计

枚举(完美立方)

题目描述:
Description

a3 = b3 + c3 + d3为完美立方等式。例如123 = 63 + 83 + 103 。
编写一个程序,对任给的正整数N (N≤100),寻找所有的四元组(a, b, c, d)。
使得a3 = b3 + c3 + d3,其中1<a, b, c, d ≤N。

Input

正整数N (N≤100)

Output

每行输出一个完美立方,按照a的值,从小到大依次输出。
当两个完美立方等式中a的值相同,则依次按照b、c、d进行非降升序排列输出。
即b值小的先输出、然后c值小的先输出、然后d值小的先输出。

Sample Input

24

Sample Output

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>
using namespace std;
struct node
{
    int a;
    int b;
    int c;
    int d;
};
int main()
{
    int i,j,k,m,n=0;
    struct node str[100];
    for(i=6;i<=100;i++)
    {
        for(j=2;j<=i;j++)
        {
            for(k=j;k<=i;k++)
            {
                for(m=k;m<=i;m++)
                {
                    if(i*i*i==(j*j*j+k*k*k+m*m*m))
                    {
                        str[n].a=i;
                        str[n].b=j;
                        str[n].c=k;
                        str[n].d=m;
                        n++;
                    }
                }
            }
        }
    }
    while(scanf("%d",&j)!=EOF)
    {
        for(i=0;;i++)
        {
            if(str[i].a>j||i>=n)
                break;
            cout<<"Cube = "<<str[i].a<<", Triple = ("<<str[i].b<<","<<str[i].c<<","<<str[i].d<<")"<<endl;
        }
    }
    return 0;
} 

你可能感兴趣的:(C语言,d3,算法分析与设计,枚举-完美立方)