本文共 1342 字,大约阅读时间需要 4 分钟。
题目描述:
三重循环判断
#include#include int mpt[5000010] ={0}; //mpt[i] = 1表示i 能够用两个完全平方数相加而得。int n;void init(){ for(int i = 0 ; i*i <= n ; i ++) for(int j = 0 ; j*j <=n ; j ++) if(i*i+j*j <= n) mpt[i*i+j*j] = 1;}int main(){ int flag = false; scanf("%d",&n); init(); for(int i = 0 ; i * i <= n ; i ++) { for(int j = 0 ; j * j <= n ; j ++){ if(mpt[n - i*i - j*j] == 0)//第一次技巧 continue; //如果剩下的差用两个完全平方数不能组合出来就不继续 for(int k = 0 ; k * k <= n ; k ++) { int temp = n - i*i - j*j - k*k; double l = sqrt((double) temp);//第二次技巧 if(l == (int)l ) { printf("%d %d %d %d\n",i,j,k,(int)l); flag = true; break; } } if(flag)break; } if(flag)break; } return 0;}
转载地址:http://whimi.baihongyu.com/