枚举 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; }