zoukankan      html  css  js  c++  java
  • C#语句2——循环语句(for穷举、迭代和while循环)

    一、for循环拥有两类:

    (一)、穷举:

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

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

    int ci = 0;

                int biao = 0;//标记变量

                for (int x = 0; x <= 10; x++)

                {

                    for (int y = 0; y <= 30; y++)

                    {

                        for (int z = 0; z <= 75; z++)

                        {

                            ci++;

                            if (15 * x + y * 5 + z * 2 == 150)

                            {

                                biao++;

                                Console.WriteLine("第{0}种买法:洗发水{1}瓶,牙刷{2}支,香皂{3}块。", biao, x, y, z);

                            }

                        }

                    }

                }

                Console.WriteLine("总共有{0}种买法。", biao);

                Console.WriteLine(ci);

                Console.ReadLine();

    2.百鸡百钱:公鸡2文钱一只,母鸡1文钱一只,小鸡半文钱一只,总共只有100文钱,如何在凑够100只鸡的情况下刚好花完100文钱?(或者大马驼2石粮食,中等马驼1石粮食,两头小马驼1石粮食,要用100匹马,驼100石粮食,该如何分配?)

                int ci = 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 + z * 0.5 == 100 && x + y + z == 100)

                            {

                                Console.WriteLine("公鸡{0}只,母鸡{1}只,小鸡{2}只。", x, y, z);

                                ci++;

                            }

                        }

                    }

                }

                Console.WriteLine(ci);

                Console.ReadLine();

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

                int ci = 0;

                for (int x = 0; x <= 100; x++)

                {

                    for (int y = 0; y <= 50; y++)

                    {

                        for (int z = 0; z <= 20; z++)

                        {

                            if (x + 2 * y + 5 * z == 100)

                            {

                                Console.WriteLine("1分钱{0}枚,2分钱{1}枚,5分钱{2}枚。", x, y, z);

                                ci++;

                            }

                        }

                    }

                }

                Console.WriteLine(ci);

                Console.ReadLine();

    (二)、迭代:

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

    1.五个小朋友排成一队,问第一个多大了,第一个说比第二个大两岁,问第二个多大了,第二个说比第三个大两岁。。。以此类推,问第5个小朋友,说自己3岁了。问第一个小朋友几岁了?

                int sum = 3;

                for (int i = 1; i < 5; i++)

                {

                    sum += 2;

                }

                Console.WriteLine(sum);

                Console.ReadLine();

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

                double height = 0.07;

                int ci = 0;

                while (height <= 8848000)

                {

                    ci++;

                    height *= 2;

                }

                Console.WriteLine(ci);

                Console.ReadLine();

    二、while循环

    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++);//在中括号内给予值得改变方式

    }

    跳转语句:

    break:跳出整个循环

    continue:跳出本次循环,继续下次循环。

    注:●do

    {

        循环体;

        状态改变(i++);

    }while(表达式(i<=5))

    注意:do while是不管满不满足表达式,我都会先执行一遍。

    ●while死循环

    while (true)//死循环一

    {

           循环体;

           状态改变;

    }

    while (1 == 1)//死循环二

    {

         循环体;

         状态改变;

    }

    While循环例题:

    1、100节楼梯,前50节每节分数等于阶梯数,当到第30节时直接跳到第50节得100分, 51节开始每节10分

                int n = 0;

                int m = 0;

                while (n < 100)

                {

                    n++;

                    if (n <= 30)

                    {

                        m = m + n;

                        Console.WriteLine("到{0}层时的分数是{1}。", n, m);

                    }

                    if (n > 30 && n <= 50)

                    {

                        if (n == 50)

                        {

                            m += 100;

                            Console.WriteLine("到50层的分数" + m);

                        }

                        continue;

                    }

                    if (n > 50)

                    {

                        m += 10;

                        Console.WriteLine("到{0}层时的分数是{1}。", n, m);

                    }

                }

                Console.ReadLine();

    2、do  while

    增补循环语句一——for循环

    1、有一对幼兔,幼兔1个月后长成小兔,小兔1个月后长成成兔并生下一对幼兔,问几年后有多少对兔子,幼兔、小兔、成兔对数分别是多少。成兔每月生下一对幼兔。

     

    成兔对数

    0

    0

    1

    1

    2

    3

    5

    小兔对数

    0

    1

    0

    1

    1

    2

    3

    幼兔对数

    1

    0

    1

    1

    2

    3

    5

    月份

    1

    2

    3

    4

    5

    6

    7

    总对数

    1

    1

    2

    3

    5

    8

    13

    根据上表可以得到结论:

    本月的成兔=上月的小兔+上月的成兔。

    本月的小兔=上月的小兔。

    本月的幼兔=本月的成兔。

    Console.Write("请输入月数:");

                int m = int.Parse(Console.ReadLine ());

                int a = 0, b = 0, c = 1, d = 1;

                int i = 1;

                for (; i <= m; i++)

                {

                    if (i == 1)

                    {

                        a = 0;

                        b = 0;

                        c = 1;

                    }

                    else

                    {

                        a = b + a;

                        b = c;

                        c = a;

                    }

                    d = a + b + c;

                  

                }

                Console.WriteLine("{0}个月后成兔对数是{1}", i, a);

                Console.WriteLine("{0}个月后小兔对数是{1}", i, b);

                Console.WriteLine("{0}个月后幼兔对数是{1}", i, c);

                Console.WriteLine("{0}个月后兔总对数是{1}", i, d);

                Console.ReadLine();

  • 相关阅读:
    [No0000188][VCB-Studio 科普教程 2.5] 基于 PotPlayer 和 madVR 的播放器教程(已更新 XySubFilter)
    [No0000184]JAVA语言学校的危险性
    [No0000185]Java技术板块图
    [No0000187]可能是把Java内存区域讲的最清楚的一篇文章
    [No0000183]Parallel Programming with .NET-How PLINQ processes an IEnumerable<T> on multiple cores
    [No0000182]Parallel Programming with .NET-Partitioning in PLINQ
    [No0000179]改善C#程序的建议2:C#中dynamic的正确用法
    [No0000178]改善C#程序的建议1:非用ICloneable不可的理由
    [No0000181]改善C#程序的建议9:使用Task代替ThreadPool和Thread
    [No000017E]改善C#程序的建议7:正确停止线程
  • 原文地址:https://www.cnblogs.com/H2921306656/p/5614347.html
Copyright © 2011-2022 走看看