zoukankan      html  css  js  c++  java
  • 3月10日

    今天放的是穷举和迭代,以及一些练习题,自己做了做。

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


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

                int sum = 0;
                for (int x = 0; x <= 15; x++)
                {
                    for (int y = 0; y <= 75; y++)
                    {
                        for (int z = 0; z <= 30; z++)
                        {
                            sum++;
                            if (x * 15 + y * 2 + z * 5 == 150)
                            {
                                Console.WriteLine("这是第" + sum + "种买法,其中洗发水" + x + ";香皂" + y + ";牙刷" + z + "");
                            }
                        }
                    }
                }
                Console.WriteLine("sum=" + sum + "");
                Console.ReadLine();

     

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

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

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

     

    练习题:

    1.

    //100节楼梯,0-49节的每一节是本身的分数,
    //从50开始是每一关10分。
    //输入现在所到的节数,求现在的分数

                Console.Write("请输入现在所到的节数:");
                int j = int.Parse(Console.ReadLine());
                int sum = 0;
                if (j >= 0 && j <= 100)
                {
                    for (int a = 1; a <= j; a++)
                    {
                        if (a <= 49)
                        {
                            sum += a;
                        }
                        else
                        {
                            sum += 10;
                        }
                    }
                    Console.WriteLine("您现在的分数是:" + sum + "");
                }
                else
                {
                    Console.WriteLine("您现在输入的节数有误");
                }
                Console.ReadLine();
                    
                    

     

    2.

    //兔子生兔子:有一对幼兔,幼兔一个月后长成小兔,小兔一个月后长成成兔并生下一对幼兔。成兔每月生下一对幼兔。
    //问几月后有多少对兔子,幼兔,小兔,成兔对数分别是多少。
    //除了第一个月之后的所有月份都可以直接执行
    //成兔=上个月的成兔加上上个月的小兔
    //小兔=上个月的幼兔
    //幼兔=上个月的成兔加上上个月的小兔(即这个月的成兔)

                Console.Write("请输入所求月数:");
                int m = int.Parse(Console.ReadLine());
                int yt = 1;
                int xt = 0;
                int ct = 0;
                int zt = 0;
                for (int i = 1; i <= m; i++)
                {
                    if (i == 1)
                    {
                        yt = 1;
                        xt = 0;
                        ct = 0;
                    }
                    else
                    {
                        ct = ct + xt;
                        xt = yt;
                        yt = ct;
                    }
                    zt = yt + ct + xt;
                }
                Console.WriteLine("现在有" + yt + "对幼兔。");
                Console.WriteLine("现在有" + xt + "对小兔。");
                Console.WriteLine("现在有" + ct + "对成兔。");
                Console.WriteLine("现在有总兔对数" + zt + "");
                Console.ReadLine();

     

    3.

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

               int m = 0;
                for (int x = 0; x <= 50; x++)
                {
                    for (int y = 0; y <= 100; y++)
                    {
                        for (int z = 0; z <= 200; z++)
                        {                      
    if (2 * x + y + 0.5 * z == 100&&x+y+z==0) { Console.WriteLine("其中公鸡为" + x + "只,母鸡为" + y + "只,小鸡为" + z + "只。"); m++; } } } } Console.WriteLine("共有" + m + "种情况"); Console.ReadLine();

    // while 循环
    其实是for循环的变形写法
    for(int i = 1; i<=5;i++)
    {
     循环体;
    }

    //上面的for循环可以写成

    int i= 1;
    for(;i<=5;)
    {
     循环体;
     i++;
    }

    //写成while就是以下样式
    int i= 1;
    while(表达式(i<=5))
    {
     循环体;
    状态改变(i++);
    }


    //do
    {
     循环体;
     状态改变(i++);
    }while(表达式(i<=5))
    注意:do while是不管满不满足表达式,我都会先执行一遍。


    //跳转语句:
    //break:跳出整个循环
    //continue:跳出本次循环,继续下次循环。

  • 相关阅读:
    JavaScript中的闭包
    SQL 备忘
    SqlServer 2005 升级至SP2过程中出现"身份验证"无法通过的问题
    unable to start debugging on the web server iis does not list an application that matches the launched url
    Freebsd 编译内核
    Freebsd 6.2中关于无线网络的设定
    【Oracle】ORA01219
    【Linux】Windows到Linux的文件复制
    【Web】jar命令行生成jar包
    【Linux】CIFS挂载Windows共享
  • 原文地址:https://www.cnblogs.com/ds-3579/p/5263863.html
Copyright © 2011-2022 走看看