zoukankan      html  css  js  c++  java
  • 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);
  • 相关阅读:
    PATA 1071 Speech Patterns.
    PATA 1027 Colors In Mars
    PATB 1038. 统计同成绩学生(20)
    1036. 跟奥巴马一起编程(15)
    PATA 1036. Boys vs Girls (25)
    PATA 1006. Sign In and Sign Out (25)
    读取web工程目录之外的图片并显示
    DOS命令
    java连接oracle集群
    servlet
  • 原文地址:https://www.cnblogs.com/zsmj001/p/3921533.html
Copyright © 2011-2022 走看看