蓝桥杯|萌新打卡 蓝桥杯 算法基础 暴力枚举——立方和等式 暴力大法好

考虑方程式 :a 3 + b 3 = c 3 + d 3 a^{3}+b^{3} = c^{3}+ d^{3} a3+b3=c3+d3
其中:a、b、c、d是互不相同的小于30的正整数。这个方程有很多解。比如:a = 1,b=12,c=9,d=10就是一个解。因为:1的立方加12的立方等于1729,而9的立方加10的立方也等于1729。当然,a=12,b=1,c=9,d=10显然也是解。如果不计abcd交换次序的情况,这算同一个解。那么a,b,c,d都可能是哪些数呢呢?
找到所有小于30的不同的正整数解。把a b c d按从小到大排列,用空格分隔,每个解占用1行。字典序输出(不同解间的顺序可以不考虑。)
Input

Output
1 9 10 12
题解 题目看起来就很暴力,可以说是完全的大水题,但是还是要注意一些细节上的层面噢!
话不多说,首先先上错误示范(也就是我的第一反应)

#include using namespace std; int main(){ for(int i=1; i<30; i++){ for(int j=1; j<30; j++){ for(int m=1; m<30; m++){ for(int n=1; n<30; n++){ if(i*i*i+j*j*j==m*m*m+n*n*n){ if(i

【蓝桥杯|萌新打卡 蓝桥杯 算法基础 暴力枚举——立方和等式 暴力大法好】你品品,你细品,你会发现这完全是行不通的(仔细看题),原因在于,如果a,b,c,d已经是从小到大的顺序,怎么可能会满足立方和等式呢?所以真正的判断条件应该是
i*i*i+m*m*m==j*j*j+n*n*n||i*i*i+n*n*n==j*j*j+m*m*m

其实也就是记得调换一下四个数的顺序即可啦。
只能说是一个小小坑,在提交代码前一定要仔细思考一遍咯!
AC代码
#include using namespace std; int main(){ for(int i=1; i<30; i++){ for(int j=1; j<30; j++){ for(int m=1; m<30; m++){ for(int n=1; n<30; n++){ if(i*i*i+m*m*m==j*j*j+n*n*n||i*i*i+n*n*n==j*j*j+m*m*m){ if(i

清楚明白,简单粗暴

    推荐阅读