• 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++;
    } 
  • 相关阅读:
    SSH 多台VM之间无密码登录
    JavaScript Calling WebService by SOAP
    Excel大数据排查重复行内容方法,三步搞定!
    linux添加软件的service start/stop快捷服务(简单版)
    Linux服务器其中一个磁盘满了怎么办?在不做磁盘扩容的情况下,一个软连接就搞定。
    oracle数据库中将clob字段内容利用java提取出至文本文档中
    最全的常用正则表达式大全——包括校验数字、字符、一些特殊的需求等等
    mysql数据库误删除操作说明
    mysql5.x升级至mysql5.7后导入之前数据库date出错的解决方法!
    新建ftp账号,并使登陆者只访问当前目录
  • 原文地址:https://www.cnblogs.com/dianfu123/p/5267853.html
Copyright © 2020-2023  润新知