数据结构与算法之枚举(穷举)法 C++实现

2015-01-27 10:12:26 · 作者: · 浏览: 12
枚举法的本质就是从所有候选答案中去搜索正确的解,使用该算法需要满足两个条件: 1、可以先确定候选答案的数量; 2、候选答案的范围在求解之前必须是一个确定的集合。 枚举是最简单,最基础,也是最没效率的算法 枚举法优点: 1、枚举有超级无敌准确性,只要时间足够,正确的枚举得出的结论是绝对正确的。 2、枚举拥有天下第一全面性,因为它是对所有方案的全面搜索,所以,它能够得出所有的解。 程序优化: 对于枚举算法,加强约束条件,缩小枚举的范围,是程序优化的主要考虑方向。
百钱买百鸡: 代码:
#include
  
   
const int COCKPR = 3;
const int HENPR = 5;
const double CHICKPR = 1/3;
void buyChicken(int money, int chooks);
int main()
{
    int money = 100;
    int chooks = 100;
    buyChicken(money, chooks);
    return 0;
}
void buyChicken(int money, int chooks)
{
    using namespace std;
    int MaxCock = money/COCKPR;
    int MaxHen = money/HENPR;
    int MaxChick = chooks;
    int cock,hen,chick;
    int count = 0;
    for(cock=0; cock<= MaxCock; cock++)
    {
        for(hen=0; hen<=MaxHen; hen++)
        {
            for(chick=0; chick<=MaxChick; chick++)
            {
                if (0 == chick%3 && cock + hen + chick == chooks && COCKPR*cock + HENPR*hen + CHICKPR*chick == money)
                    cout << "公鸡: " << cock << " 母鸡: " << hen << " 小鸡: " << chick << " 第 " << count << "有结果" <
   
     运行结果: 
    \
    
只对小鸡的数量添加一个最小的起始值 函数里面加 int MinChick = chooks-MaxCock-MaxHen; 把最里层小鸡数量的fZ??http://www.2cto.com/kf/ware/vc/" target="_blank" class="keylink">vctGtu7e1xMbwyrzM9bz+uMTOqtChvKbX7tChJiMyMDU0MDsgZm9yKGNoaWNrPU1pbkNoaWNrOyBjaGljazw9TWF4Q2hpY2s7IGNoaWNrJiM0MzsmIzQzOykgCtTLy+PKsbzkuLTU07bIyOfPwqGjyrG85Li01NO2yLz1ydnSu7DroaPLtcP3ttTT2sO2vtnL47eoo6y808e/1LzK+Mz1vP6jrMv10KHDtr7ZtcS3ts6no6zKx7PM0PLTxbuvtcTW99Kqv7zCx7e9z/KhowoKPGltZyBzcmM9"http://img.blog.csdn.net/20141105081542390?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvZ3V1Z2xlMjAxMA==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="\">
代码如下:
#include
     
      
const int COCKPR = 3;
const int HENPR = 5;
const double CHICKPR = 1/3;
void buyChicken(int money, int chooks);
int main()
{
    int money = 100;
    int chooks = 100;
    buyChicken(money, chooks);
    return 0;
}
void buyChicken(int money, int chooks)
{
    using namespace std;
    int MaxCock = money/COCKPR;
    int MaxHen = money/HENPR;
    int MaxChick = chooks;
    int MinChick = chooks-MaxCock-MaxHen;
    int cock,hen,chick;
    int count = 0;
    for(cock=0; cock<= MaxCock; cock++)
    {
        for(hen=0; hen<=MaxHen; hen++)
        {
            for(chick=MinChick; chick<=MaxChick; chick++)
            {
                if (0 == chick%3 && cock + hen + chick == chooks && COCKPR*cock + HENPR*hen + CHICKPR*chick == money)
                    cout << "公鸡: " << cock << " 母鸡: " << hen << " 小鸡: " << chick << " 第 " << count << "有结果" <
       
       
填数字游戏 \
代码:
#include
        
         
int main()
{
    using namespace std;
    int t1,t2,t3,t4,t5;
    for (t1=1; t1<=9; t1++)
    {
        for(t2=0; t2<=9; t2++)
        {
            for(t3=0; t3<=9; t3++)
            {
                for(t4=0; t4<=9; t4++)
                {
                    for(t5=0; t5<=9; t5++)
                    {
                        if(t5*100000 + t5*10000 + t5*1000 + t5*100 + t5*10 + t5 == t5*t1 + t4*t1*10 + t3*t1*100 + t2*t1*1000 + t1 *t1*10000 )
                        {
                            cout << " 算的数值为: " << t1 << " 法的数值为: " << t2 << " 描的数值为: " <
         
           运行结果: