http://202.197.224.59/OnlineJudge2/index.php/Problem/read/id/1185
判断 x3+y3 = c 是否存在正整数解,2≤c≤109
首先把给定范围内的所有情况打表用数组保存,然后直接二分查找c即可。
#include<cstdio> #include<algorithm> using namespace std; int cnt,a[1010000]; bool find(int x) { int begin=0,end=cnt-1,mid; while(begin<=end) { mid=(begin+end)/2; if(a[mid]==x) { return 1; } else if(a[mid]>x) end=mid-1; else begin=mid+1; } return 0; } int main() { int i,j,k,c; cnt=0; for(i=1;i<1000;i++) for(j=1;j<1000;j++) if(i*i*i+j*j*j<=1000000000) a[cnt++]=i*i*i+j*j*j; else break; sort(a,a+cnt); scanf("%d",&k); while(k--) { scanf("%d",&c); if(find(c)) printf("Yes\n"); else printf("No\n"); } return 0; }
或者直接借助 set容器。自动完成排序和去重。
#include<cstdio> #include<set> using namespace std; int a[1010]; int main() { int k,c,i,l,j=0; set<int>s; s.clear(); for(i=1;i<=1000;i++) a[j++]=i*i*i; for(i=0;i<j;i++) for(l=i;l<j;l++) s.insert(a[i]+a[l]); scanf("%d",&k); while(k--) { scanf("%d",&c); int flag=s.count(c); if(flag) printf("Yes\n"); else printf("No\n"); } return 0; }
原文地址:http://blog.csdn.net/u012773338/article/details/39007049