2014.8.19穷举法

穷举,迭代(for循环嵌套)

eg:

 1 //100购物券,香皂2元,牙刷5元,洗发水15元,购物券不找零,每样至少买一个,哪个组合能吧100元正好花完
 2 int count = 0;
 3 for (int i = 1; i <= 40; i++)//香皂穷举
 4 {
 5     for (int j = 1; j <= 17; j++)//牙刷穷举
 6     {
 7         for (int k = 1; k <= 7; k++)//洗发水穷举
 8         {
 9 if (2 * i + 5 * j + 15 * k == 100)//判断总和是否正好等于100
10 {
11     Console.WriteLine("香皂{0}块,牙刷{1}只,洗发水{2}瓶", i, j, k);
12     count = count + 1;//所有种类的总数
13 }
14         }
15     }
16 }
17 Console.WriteLine(count);

输出结果为

eg:

 1 //100文钱买100只鸡,公鸡2文钱,母鸡1文钱,小鸡仔半文钱,每样至少一只,问100文钱有哪些方法
 2 int count = 0;
 3 for (int i = 1; i <= 50; i++)//公鸡穷举
 4 {
 5     for (int j = 1; j <= 98; j++)//母鸡穷举
 6     {
 7         for (int k = 1; k <= 194; k++)//小鸡穷举
 8         {
 9 if (2 * i + j + 0.5 * k == 100 && i + j + k == 100)//判断
10 {
11     Console.WriteLine("公鸡{0}只,母鸡{1}只,小鸡{2}只", i, j, k);
12     count = count + 1;//种类数量
13 }
14         }
15     }
16 }
17 Console.WriteLine(count);
 1 //要从代号为A、B、C、D、E、F的六个侦察员中挑选出若干人去破案,人选的配备要求,必须注意下列各点:
 2 //①A、B两人至少去一个人
 3 //②A、D不能一起去
 4 //③A、E、F三人中要派两人去
 5 //④B、C两人中至少去一人
 6 //⑤C、D两人中去一人
 7 //⑥若D不去,则E也不去; 
 8 for (int a = 0; a <= 1; a++)//每个人都作为一个循环,遍历去或不去
 9     for (int b = 0; b <= 1; b++)
10         for (int c = 0; c <= 1; c++)
11 for (int d = 0; d <= 1; d++)
12     for (int e = 0; e <= 1; e++)
13         for (int f = 0; f <= 1; f++)
14         {
  
//判断前5个条件 15 if ((a + b > 0) && (a + d != 2) && (a + e + f == 2) && (b + c > 0) && (c + d == 1)) 16 {
    //判断第6个条件
17 if (d == 0 && e == 0) 18 { 19 Console.WriteLine("{0}{1}{2}{3}{4}{5}", a, b, c, d, e, f); 20 } 21 if (d == 1) 22 { 23 Console.WriteLine("{0}{1}{2}{3}{4}{5}", a, b, c, d, e, f); 24 } 25 } 26 }
 1 //求100以内所有质数的和
 2 for (int i = 2; i <= 100; i++)
 3 {
 4     bool b = true;//定义一个布尔变量,用来判断是否为质数
 5     for (int j = 2; j < i; j++)
 6     {
 7         //如果除1和本身有能被整除的数,则 b = false;
 8         if (i % j == 0)
 9         {
10        b = false;
11         }
12     }
13     //如果没有能被整除的数,就为质数,输出
14     if (b == true)
15     {
16         Console.Write(i + " ");
17     }
18 }
 1 //求一个数的阶乘 5!=5*4*3*2*1
 2 Console.Write("请输入一个整数(6以内):");
 3 int num = Convert.ToInt32(Console.ReadLine());
 4 int sum = 1;
 5 //从数字本身开始一直遍历到1
 6 for (int i = num; i > 1; i--)
 7 {
 8     sum = sum * i;//所有的数的积赋给sum
 9 }
10 Console.WriteLine("{0}的阶乘为:{1}", num, sum);
 1 //5!+4!+3!+2!+1!=?
 2 int result = 0;//作为总和
 3 //遍历5个数
 4 for (int i = 5; i >= 1; i--)
 5 {
 6     int sum = 1;//sum存放每个数的阶乘的值
 7     //遍历每个数阶乘的乘数
 8     for (int j = i; j >= 1; j--)
 9     {
10         sum = sum * j;
11     }
12     result = result + sum;//最后把每个数结成的值sum加起来
13 }
14 Console.WriteLine(result);
1 //第二种方法:使用单循环
2 int result = 0;
3 int jc = 1;
4 for (int i = 1; i <= 5; i++)
5 {
6     jc = jc * i;
7     result = result + jc;//相当于从1到5每个数的阶乘相加
8 }
9 Console.WriteLine(result);

 

posted on 2014-08-19 10:56  格林威治  阅读(152)  评论(0编辑  收藏  举报

友情链接:活动板房 金伟利经贸 淄博月子中心 不锈钢激光切割机 玻璃鳞片胶泥 珍珠棉