您的位置:首页 > 其它

算法基础——1.1暴力破解法(鸡兔同笼、韩信点兵问题)

2014-04-28 14:13 260 查看
利用计算机的优势:计算速度

采用最笨的计算方法

– 直接枚举每种可能的情况

– 情况数不是天文数字即可

– 要做到不遗漏

– 最好能不重复

例子1.鸡兔同笼问题:鸡兔同笼,头则50,脚则120。 问:鸡兔各几何。
/*
鸡兔问题
鸡兔同笼,头则50,脚则120。
问:鸡兔各几何。
*/

public class T1
{
public static void main(String[] args)
{
int HEAD = 50;
int FOOT = 120;

// x: 鸡数, y: 兔数
for(int x=0; x<HEAD; x++){
int y = HEAD - x;
if(x * 2 + y * 4 == FOOT){
System.out.println("x=" + x + ",y=" + y);
break;
}
}
}
}

例子2.韩信点兵:

/*
韩信点兵
今有士卒,千余人许。
5人为伍,则余1
7人为伍,则余2
8人为伍,则余3
试求确数
*/

public class T2
{
public static void main(String[] args)
{
for(int i=1000; i<2000; i++){
if(i%5==1 && i%7==2 && i%8==3) System.out.println(i);
}
}
}
3练习:

public class HomeWork1 {

/*	马与瓦
总共有 100 匹马
总共驮有 100 块瓦(古代的瓦,很大,很重)
每匹大马每次能驮 3 块瓦
每匹小马每次能驮 2 块瓦
小马驹每次 2个马驹驮 1块瓦
求各种马的数目
提示:可能是多解的,要列出所有的解。*/

public static void main(String[] args) {
int big , middle , small;
for(big = 1; big < 100; ++big)
for(middle = 1; middle < 100; ++middle)
{
small = 100 - big - middle ;
if(small%2 == 0 && (big * 3 + middle * 2 + small * 0.5) == 100)
System.out.println("大马:"+big+" \t小马:"+middle+" \t小马驹:"+small);
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: