zoukankan      html  css  js  c++  java
  • for的穷举和迭代

    for的穷举

    把所有可能的情况都走一遍,使用if条件筛选出来满足条件的情况。

    例:

    单位给发了一张150元购物卡,
    拿着到超市买三类洗化用品。
    洗发水15元,香皂2元,牙刷5元。
    求刚好花完150元,有多少种买法,
    每种买法都是各买几样?

    设洗发水   x 150/15==10
    牙刷         y 150/5==30
    香皂         z 150/2==75

                int biao = 0;
                int sum = 0;
                for (int x = 0; x <= 10; x++)
                {
                    for (int y = 0; y <= 30; y++)
                    {
                        for (int z = 0; z <= 75; z++)
                        {
                            sum++;
                            if (x * 15 + y * 5 + z * 2 == 150)
                            {
                                biao++;
                                Console.WriteLine("这是第" + biao + "种买法:洗发水" + x + "瓶,牙刷" + y + "支,香皂" + z + "块。");
                            }
                        }
                    }
                }
                Console.WriteLine("共有" + biao + "种买法!");
                Console.WriteLine(sum);
    
                Console.ReadLine();

    例:

    百鸡百钱:公鸡2文钱一只,母鸡1文钱一只,小鸡半文钱一只,总共只有100文钱,
    如何在凑够100只鸡的情况下刚好花完100文钱?

    设g m x

    g + m + x = 100;g*2+m+x*0.5=100

                int n = 0;
                for (int g = 1; g * 2 <= 100; g++)
                {
                    for (int m = 1; m <= 100; m++)
                    {
                        for (int x = 1; x * 0.5 <= 100; x++)
                        {
                            if (g * 2 + m + x * 0.5 == 100 && g + m + x == 100)
                            {
                                Console.WriteLine(g + "只公鸡" + m + "只母鸡" + x + "只小鸡" + "一共有" + (g + m + x) + "只鸡");
                                n++;
                            }
                        }
                    }
                }
    
                Console.WriteLine(+n + "种可能性");
                Console.ReadLine();

    例:

    大马驼2石粮食,
    中等马驼1石粮食,
    两头小马驼1石粮食,
    要用100匹马,驼100石粮食,该如何分配?

    设 d z x         d*2+z+(0.5*x)=100;d+z+x=100;

                int n = 0;
                for (int d = 1; d * 2 <= 100; d++)
                {
                    for (int z = 1; z <= 100; z++)
                    {
                        for (int x = 1; 0.5 * x <= 100; x++)
                        {
                            if (d * 2 + z + 0.5 * x == 100 && d + z + x == 100)
                            {
                                Console.WriteLine("需要大马" + d + "头,中等马" + z + ",小马" + x + "头。");
                                n++;
                            }
                        }
                    }
                }
    
                Console.WriteLine(n);
                Console.ReadLine();

    例:

    有1分钱,2分钱,5分钱的硬币,要组合出来2角钱,有几种组合方式,分别各多少个?

    int sum = 0;
                  for (int x = 0; x <= 20; x++)
                  {
                      for (int y = 0; y <= 10; y++)
                      {
                          for (int z = 0; z <= 4; z++)
                          {
                              if (x + 2*  y + 5*  z == 20)
                              {
                                  Console.WriteLine("一分钱 " + x + "个,两分钱 " + y + " 个,五分钱 " + z + " 个!");
                                  sum++;
                              }
                          }
                      }
                  }
                  Console.WriteLine(sum);
                  Console.ReadLine();

    迭代:
    从初始情况按照规律不断求解中间情况,最终推导出结果。

    例:

    纸张可以无限次对折,纸张厚度为0.07毫米。
    问多少次对折至少可以超过8848?

                int a = 7;//884800000
                int i = 1;
                for (; ; )
                {
                    a *= 2;//a=a*2;
                    if (a >= 884800000)
                    {
                        Console.WriteLine(i);
                        Console.WriteLine(a);
                        break;
                    }
                    i++;
                }
    int a = 7;//884800000
    int i = 1;
    
    while(true)
    {
    a *= 2;
    
    if (a >= 884800000)
    {
    Console.WriteLine(i);
    Console.WriteLine(a);
    break;
    }
    i++;
    } 

                                                                                                                                                        

  • 相关阅读:
    Android应用四大组件和应用程序的生命周期
    DOCTYPE html PUBLIC 指定了 HTML 文档遵循的文档类型定义
    Web前端灰框技术
    用JS实现在页面关闭或刷新时触发特定的事件
    style.display的全部属性值
    Android SDK更新的问题
    页面灰框模式精彩实现
    解决sql 语句中truncate语句不支持变量的问题
    获取网页中图片链接的路径的正则表达式
    web页面自动保存本页面的内容到本地
  • 原文地址:https://www.cnblogs.com/mantou1314/p/5266088.html
Copyright © 2011-2022 走看看