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:跳出本次循环,继续下次循环。

  • 相关阅读:
    C#开发模式——单例模式
    C#开发模式——单例模式
    Memcached的基础梳理
    Memcached的基础梳理
    Memcached的基础梳理
    Memcached的基础梳理
    13条只有程序员才能懂的内涵段子
    13条只有程序员才能懂的内涵段子
    网页性能优化
    webpack中使用ECharts
  • 原文地址:https://www.cnblogs.com/ds-3579/p/5263863.html
Copyright © 2011-2022 走看看