01枚举法
枚举也叫穷举法,根据题意,列举所有可能性,并根据情况来提供约束条件
枚举结构:循环+判断
枚举常用的优化方式:
-
1.缩小枚举范围
-
2.减少枚举变量
枚举的优缺点:
- 1.运算量大
- 2.思路简单,程序编写和调试方便
例题1
百钱买百鸡问题
#include<iostream>
#include<stdio.h>
using namespace std;
int main()
{
//for (int i = 1; i <= 100; i++)
//{
// for (int j = 1; j <= 100; j++)
// {
// for (int k = 1; k <= 100; k++)
// {
// if (5 * i + 3 * j + k / 3 == 100 && i + j + k == 100&& k%3==0)
// {
// cout << "公鸡:" << i << "母鸡:" << j << "小鸡:" << k << endl;
// }
// }
// }
//}
//缩小枚举范围
//for (int i = 1; i <= 18; i++)
//{
// for (int j = 1; j <= 32; j++)
// {
// for (int k = 1; k <= 98; k++)
// {
// if (5 * i + 3 * j + k / 3 == 100 && i + j + k == 100&& k%3==0)
// {
// cout << "公鸡:" << i << "母鸡:" << j << "小鸡:" << k << endl;
// }
// }
// }
//}
//*减少枚举变量 很大 的优化*
//小鸡=100-公鸡-母鸡
//for (int i = 1; i <= 18; i++)
//{
// for (int j = 1; j <= 32; j++)
// {
// int MiddleChicken = 100 - i - j;
// if (5 * i + 3 * j + MiddleChicken / 3 == 100 && MiddleChicken%3==0)
// {
// cout << "公鸡:" << i << " 母鸡:" << j << " 小鸡:" << MiddleChicken << endl;
// }
// }
//}
//将枚举变量变为一个
//母鸡=(100-7*公鸡)/4
for (int i = 1; i <= 18; i++)
{
if ((100 - 7 * i) % 4 == 0 && ((100 - 7 * i) /4)>0)
{
int chicken = (100 - 7 * i) / 4;
int MiddleChicken = 100 - i - chicken;
if (5 * i + 3 * chicken + MiddleChicken / 3 == 100 && MiddleChicken % 3 == 0)
{
cout << "公鸡:" << i << " 母鸡:" << chicken << " 小鸡:" << MiddleChicken << endl;
}
}
}
system("pause");
return 0;
}