迭代法和穷举法

Posted 斐雪

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了迭代法和穷举法相关的知识,希望对你有一定的参考价值。

迭代法:
每次循环都要把某一个或多个变量不断放大,为的是下一次循环可以继续使用,最后达到最终的大小。
代表性的题:
1、累加求和
2、阶乘
3、折纸
int sum = 0;
for(int i=1;i<=10;i++)
{
  sum += i;
}

穷举法:
将所有的可能性都走一遍,然后判断符合条件的可能性,单独拿出来。
基本用法:
int count = 0;
for (int i = 1; i <= 15; i++) //1分的硬币
{
  for (int j = 1; j <= 7; j++)//2分的硬币
  {
    for (int u = 1; u <= 3; u++) //5分的硬币
    {
      if (i + (j * 2) + (u * 5) == 15) //****
      {
        Console.WriteLine("1分的需要" + i + "个,2分的需要" + j + "个,5分的需要" + u + "个");
        count++;
      }
    }
  }
}

Console.WriteLine("总共有" + count + "种可能性!");

 

 

练习1

百鸡百钱,有100文钱,要买100只鸡回家。公鸡2文钱一只,母鸡1文钱一只,小鸡半文钱一只,该如何买?

            int count = 0;//次数
            for (int i = 0; i <= 200; i++)//小鸡
            {
                for (int j = 0; j <= 100; j++)//母鸡
                {
                    for (int u = 0; u <= 50; u++)//公鸡
                    {
                        if ((i * 0.5) + j + (u * 2) == 100)
                        {
                            if (i+j+u==100)
                            {
                                Console.WriteLine("公鸡" + u + "只,母鸡" + j + "只,小鸡" + i + "只。");
                                count++;
                            }
                        }
                    }
                }
            }
            Console.WriteLine(count );
                Console.ReadLine();            

运算结果

练习2

有三种硬币若干个,1分,2分,5分,如果要凑够1毛5,有哪些组合方式?
扩展:三种硬币最少都要有一个

            int count = 0;
            for (int i = 1; i <= 15; i++)
            {
                for (int j = 1; j <= 7; j++)
                {
                    for (int a = 1; a <= 3; a++)
                    {
                        if (i + (j * 2) + (a * 5) == 15)
                        {
                            Console.WriteLine("1分需要" + i + "个,2分需要" + j + "个,5分需要" + a + "");
                            count++;
                        }
                    }
                }
            }
            Console.WriteLine(count);
            Console.ReadLine();

运算结果

以上是关于迭代法和穷举法的主要内容,如果未能解决你的问题,请参考以下文章

常用算法--穷举法

2017.02.24C# 跳转语句,迭代法,穷举法,异常语句处理。

使用迭代法穷举1到N位最大的数

暴力穷举和回溯法(八皇后问题)

每日辞典 常用算法设计技术

背包问题[穷举法]