枚举 PROBLEM 3 完美立方

/**find a formula which satisfy a^3=b^3+c^3+d^3*/

·关键在于去重减少预算量

方法:把要用到的立方都存储起来,防止重复计算。

·排除显而易见的不可能的情况,如当   a^3<b^3+c^3+d^3  即 break

·头文件math.h

 

#include <cstdlib>
#include <iostream>
#include <math.h>
using namespace std;

int main(int argc, char *argv[])
{
    int n;
    int cube[101]; //store all cube  from 1 to n
    int a,b,c,d;
    scanf("%d",&n);
    for(int i=1;i<=n;i++)
    {
            cube[i]=i*i*i;
    }
    /**enumerate */
    for(a=5;a<=n;a++)
    {
            for(b=2;b<a-1;b++)
            {
                   if(cube[a]<cube[b]+cube[b+1]+cube[b+2]) break;  //constraint condition of early termination
                   for(c=b+1;c<=a-1;c++)
                   {
                         if(cube[a]<cube[b]+cube[c]+cube[c+1]) break;
                         for(d=c+1;d<a;d++)
                         {
                              if(cube[a]<cube[b]+cube[c]+cube[d]) break;
                              if(cube[a]==cube[b]+cube[c]+cube[d])
                              {
                                   printf("Cube=%d  triple=(%d,%d,%d)\n",a,b,c,d);
                              }
                         }
                   }
            }
    }
    system("PAUSE");
    return EXIT_SUCCESS;
}

 

 

 

posted @ 2010-04-18 16:54  love && peace  阅读(203)  评论(0编辑  收藏  举报