核心思想就是:枚举所有的可能
也就是尽可能的尝试所有的可能,该算法非常暴力,速度很慢,但是实现简单,得到结果总是正确(牺牲时间)
该程序仅仅是在某机器环境下的 运行时间差异
如果两段程序在不同的机器下 运行,运行时间差异可能会不同(时间复杂度)
a+b+c=1000; a^2 + b^2 = c^2 求出a,b,c abc是自然数
//第一种
public static void demo(){
for(int a = 0 ; a < 1000; a++){
for(int b = 0 ; b < 1000; b++){
for(int c = 0; c < 1000; c++){
if((a + b + c == 1000) && ((a*a)+(b*b) == c*c)){
System.out.println(a + "---" + b + "---" + c);
}
}
}
}
}
控制台输出:
0---500---500
200---375---425
375---200---425
500---0---500
912
//优化后
public class Deom {
//a+b+c=1000; a^2 + b^2 = c^2 求出a,b,c abc是自然数
public static void main(String[] args) {
long time = System.currentTimeMillis();
System.out.println(time);
demo();
System.out.println(System.currentTimeMillis() - time);
}
public static void demo(){
for(int a = 0 ; a < 1000; a++){
for(int b = 0 ; b < 1000; b++){
if((a + b + (1000-a-b) == 1000) && ((a*a)+(b*b) == (1000-a-b)*(1000-a-b))){
System.out.println(a + "---" + b + "---" + (1000-a-b));
}
}
}
}
}
控制台输出:
0---500---500
200---375---425
375---200---425
500---0---500
10