编程算法基础_惯用思路_0_暴力破解
编程算法基础_常用思路_0_暴力破解
0--暴力破解法
概念:
通过直接列举所有可能情况的求解思路。因为计算机的运算速度优势,在手工计算看似不可能的处理方法,通过机器计算很可能十分轻松。只要所列举的情况数目不是特别巨大即可。
思路:
a) 枚举所有可能的情况
b) 用条件来筛选可能情况
案例:
package day1; public class test { public static void main(String[] args) { example3(); } /** * 暴力破解法-鸡兔问题 * 鸡兔同笼,头共50,脚共120 * 问: 鸡兔各几何 * 结果: 鸡个数为: 40 兔个数为: 10 */ public static void example1(){ // x表示鸡个数, y表示兔个数 for(int x=0; x<50; x++){ int y = 50 - x; if(x*2 + y*4 == 120){ System.out.println("鸡个数为: " + x + " 兔个数为: " + y); } } } /** * 暴力破解法-韩信点兵 * 1 只知道总人数在1000人左右 * 2 5人一组,余1人;7人一组,余2人; 8人一组,余3人 * 问: 总人几何 * 结果: * 总人数为: 1171 总人数为: 1451 总人数为: 1731 */ public static void example2(){ for(int i=900; i<2000; i++){ if(i%5 ==1 && i%7 ==2 && i%8 ==3){ System.out.println("总人数为: " + i); } } } /** * 暴力破解法-马驮瓦 * 1 马共100头,瓦共100片 * 2 马分为: 大马,小马,,马驹 * 3 每匹大马每次能驮 3 块;每匹小马每次能驮 2 块瓦;小马驹每次 2个马驹驮 1块瓦 * 问: 各种马几何 * 结果: * 第1次结果--->大马为: 1 大马为: 32 马驹为: 67 第2次结果--->大马为: 2 大马为: 30 马驹为: 68 第3次结果--->大马为: 4 大马为: 27 马驹为: 69 第4次结果--->大马为: 5 大马为: 25 马驹为: 70 第5次结果--->大马为: 7 大马为: 22 马驹为: 71 第6次结果--->大马为: 8 大马为: 20 马驹为: 72 第7次结果--->大马为: 10 大马为: 17 马驹为: 73 第8次结果--->大马为: 11 大马为: 15 马驹为: 74 第9次结果--->大马为: 13 大马为: 12 马驹为: 75 第10次结果--->大马为: 14 大马为: 10 马驹为: 76 第11次结果--->大马为: 16 大马为: 7 马驹为: 77 第12次结果--->大马为: 17 大马为: 5 马驹为: 78 第13次结果--->大马为: 19 大马为: 2 马驹为: 79 第14次结果--->大马为: 20 大马为: 0 马驹为: 80 */ public static void example3(){ // 大马 x 小马y 马驹 z int count = 0; for(int x=0; x<34; x++){ for(int y=0; y<50; y++){ int z = 100 - x - y; if(3*x + 2*y + z/2 == 100){ ++count; System.out.println("第" + count + "次结果--->大马为: " + x + " 大马为: " + y + " 马驹为: " + z); } } } } }