本文主要是介绍立方和等式,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
考虑方程式:a^3 + b^3 = c^3+ d^3
其中:“^”表示乘方。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交换次序的情况,这算同一个解。
你的任务是:找到所有小于30的不同的正整数解。把a b c d按从小到大排列,用逗号分隔,每个解占用1行。比如,刚才的解输出为:
1,9,10,12
不同解间的顺序可以不考虑。
//有大神解法,,,,原理尚不明确
public static void main(String[] args) {// TODO Auto-generated method stubfor(int a=1;a<=29;a++){for(int b=1;b<=29;b++){for(int c=1;c<=29;c++){for(int d=1;d<=29;d++){if(a<b&&b<c&&c<d){int powa =a*a*a;int powb =b*b*b;int powc =c*c*c;int powd =d*d*d;if((powa+powd)==(powb+powc)){System.out.println(a+","+b+","+c+","+d);}}}}}}
}
//本人暴力笨笨的方法
import java.util.*;public class Init66 {/*** @param args*///然后敲出一个set集合加全排列,,,复杂度贼多,,,,,,但是可信度高static int[] arr = new int[30];static Set<String> set = new HashSet<String>();public static void main(String[] args){List<Integer> a = new ArrayList<Integer>();List<Integer> b = new ArrayList<Integer>();for(int i=1;i<30;i++){a.add(i);arr[i] =i*i*i;}All(a,b);for(String str:set){System.out.println(str);}}public static void All(List<Integer> a,List<Integer> b){if(b.size()==4){List<Integer> c = new ArrayList<Integer>(b);if(arr[c.get(0)]+arr[c.get(1)]==arr[c.get(2)]+arr[c.get(3)]){Collections.sort(c);set.add(c.get(0)+","+c.get(1)+","+c.get(2)+","+c.get(3));}}else{for(int i=0;i<a.size();i++){b.add(a.remove(i));All(a,b);a.add(i,b.remove(b.size()-1));}}}}
这篇关于立方和等式的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!