POJ 1543 Perfect Cubes(暴力)
暴力水过的方式是多样化的。。
1 #include <stdio.h> 2 #include <string.h> 3 #include <math.h> 4 #include <stdlib.h> 5 #define eps 0.000000001 6 int p[5],n,m,num; 7 struct tri 8 { 9 int a,b,c,d; 10 }o[100001]; 11 int cmp(const void *a,const void *b) 12 { 13 struct tri *p = (struct tri*)a; 14 struct tri *q = (struct tri*)b; 15 if(p->a != q->a) 16 return p->a - q->a; 17 else return p->b - q->b; 18 } 19 void dfs(int step,int x) 20 { 21 int i,j,sum = 0; 22 for(i = 1;i < step;i ++) 23 sum += p[i]*p[i]*p[i]; 24 if(sum > m) 25 return ; 26 if(step > 3) 27 { 28 j = (int)(pow(sum,1.0/3)+eps); 29 if(sum == j*j*j) 30 { 31 o[num].a = j; 32 o[num].b = p[1]; 33 o[num].c = p[2]; 34 o[num].d = p[3]; 35 num ++; 36 } 37 return ; 38 } 39 for(i = x+1;i <= n;i ++) 40 { 41 p[step] = i; 42 dfs(step+1,i); 43 } 44 } 45 int main() 46 { 47 int i; 48 scanf("%d",&n); 49 m = n*n*n; 50 dfs(1,1); 51 qsort(o,num,sizeof(o[0]),cmp); 52 for(i = 0;i <= num-1;i ++) 53 printf("Cube = %d, Triple = (%d,%d,%d)\n",o[i].a,o[i].b,o[i].c,o[i].d); 54 return 0; 55 }