暴力破解法是指从可能的解集合(空间)中一一列举各情况,用题目给定的检验条件判定哪些是没用的,哪些是有用的。能使命题成立的值,即为问题的解。
基本思路:
(1)确定问题的可能解的范围(可能解的空间)。
(2)逐一列出可能解集合中的元素,验证是否是问题的解。
优化方向:通过加强约束条件,缩小可能解的集合的规模。
按照暴力破解法的思想,我们首先会想到的就是直接所有循环破解。
解法一:
1.抽象出数学模型,这里指的就是方程组
设公鸡为x,母鸡为y,小鸡为z,
鸡: x+y+z=100
钱: 5x+3y+1/3z=100
2.代码
#include<iostream>
using namespace std;
int main()
{
int x,y,z;
for(x=0;x<=20;x++)//公鸡不会超过20只
for(y=0;y<=34;y++)//母鸡不会超过34只
for(z=0;z<=100;z++)//小鸡不会超过100只
if((x+y+z)==100 && (5*x+3*y+z/3)==100&&z%3==0)//同时要满足z是3的整数
cout<<"cock="<<x<<","<<"hen="<<y<<","<<"chicken="<<z<<endl;
return 0;
}
解法二:
1.减少一个循环的嵌套,模型不变,进一步优化算法
2.代码
#include<iostream>
using namespace std;
int main(){ int x,y,z;
for(x=0;x<=20;x++)//公鸡不会超过20只
for(y=0;y<=34;y++)//母鸡不会超过34只
{ z=100-x-y;//根据x,y可求出z
if(z==(300-15*x-9*y)&&z%3==0)
cout<<"cock="<<x<<","<<"hen="<<y<<","<<"chicken="<<z<<endl;
}
return 0;
}
解法三:1. 继续减少一个循环的嵌套
鸡: x+y+z=100
钱: 15x+9y+z=300
=>>7x+4y=100 ->y ->z
2.代码:
#include<iostream>
using namespace std;
int main()
{
int x,y,z;
for(x=0;x<=20;x++)//公鸡不会超过20只
{
y=25-1.75*x;//先求y
z=100-x-y;//再求z
if(z==(300-15*x-9*y)&&z%3==0&&y>0&&&z>0)
cout<<"cock="<<x<<","<<"hen="<<y<<","<<"chicken="<<z<<endl;
}
return 0;
}
因为【判断不太严格】,so————————————————————————————偷鸡
代码如下:
#include<iostream>
using namespace std;
int main()
{
cout<<"cock=0,hen=25,chicken=75"<<endl<<"cock=4,hen=18,chicken=78"<<endl<<"cock=8,hen=11,chicken=81"<<endl<<"cock=12,hen=4,chicken=84";
return 0;
}
0.0分
1 人评分
C语言程序设计教程(第三版)课后习题7.2 (Java代码)浏览:694 |
C语言程序设计教程(第三版)课后习题8.1 (Java代码)浏览:828 |
数组输出 (C语言代码)浏览:811 |
C语言程序设计教程(第三版)课后习题11.8 (C语言代码)浏览:640 |
Hello, world! (C语言代码)浏览:1315 |
C语言考试练习题_排列 (C语言代码)浏览:1373 |
C语言程序设计教程(第三版)课后习题11.5 (C语言代码)浏览:1550 |
数组与指针的问题浏览:760 |
2003年秋浙江省计算机等级考试二级C 编程题(2) (C语言代码)浏览:654 |
链表数据求和操作 (C语言代码)浏览:1035 |