• 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);
  • 相关阅读:
    es6作用域
    es6函数的扩展
    input输入框ios上光标与placeholder、value不能对齐居中
    移动端input常用样式
    webpack安装遇到的坑
    错误类型
    滚动超出一定高度后,导航栏吸顶
    表单change()事件
    第二周学习进度
    第一周学习进度
  • 原文地址:https://www.cnblogs.com/zsmj001/p/3921533.html
Copyright © 2020-2023  润新知