迭代法,穷举法及其练习题

总结:
1、基本语法:
数据类型,类型转换,输入输出,运算符(条件运算符) ? :

2、分支语句:
有选择性的执行某行或某段代码
if ... else if ... else... --最主要,必须要记住并且灵活运用
switch ... case ... default... --看到要明白什么意思

分支嵌套:在符合一定条件的基础上继续判断其它条件

3、循环语句:
循环四要素:初始条件,循环条件,循环体,状态改变
for() //最常用,最好用,最清晰,最灵活
{

}
必须记住,掌握,灵活运用

while() //不够清晰
{

}

foreach() //遍历,数组,集合(泛型集合)
{

}

循环的嵌套:
一般只需要套两层循环就足够了,外面的循环走一遍,里面的循环会走一整遍

-------------------------------------------------------------------
!!!!中间变量的运用,要灵活掌握
-------------------------------------------------------------------

迭代法:
每次循环都要把某一个或多个变量不断放大,为的是下一次循环可以继续使用,最后达到最终的大小。
代表性的题:
1、累加求和
2、阶乘
3、折纸
int sum = 0;
for(int i=1;i<=10;i++)
{
sum += i;
}

穷举法:
将所有的可能性都走一遍,然后判断符合条件的可能性,单独拿出来。
基本用法:
int count = 0;
for (int i = 1; i <= 15; i++) //1分的硬币
{
    for (int j = 1; j <= 7; j++)//2分的硬币
    {
        for (int u = 1; u <= 3; u++) //5分的硬币
        {
             if (i + (j * 2) + (u * 5) == 15) //判断这种可能性的硬币够不够15分
             {
                  Console.WriteLine("1分的需要" + i + "个,2分的需要" + j + "个,5分的需要" + u + "个");
                  count++;
             }
        }
    }
}

Console.WriteLine("总共有" + count + "种可能性!");
-------------------------------------------------------------------------------------------------
穷举练习题:
1、有三种硬币若干个,1分,2分,5分,如果要凑够1毛5,有哪些组合方式?
扩展:三种硬币最少都要有一个

            int count = 0;
            //若初始条件 int i = 1/int j = 1/int h = 1 ,
            //代表每一种价值的硬币在组合中必须有一个。
            for (int i = 0; i <= 15; i++)
            {
                for (int j = 0; j <= 7; j++)
                {
                    for (int h = 0; h <= 3; h++)
                    {
                        if (i + (j * 2) + (h * 5) == 15)
                        {
                            Console.WriteLine("一分的需要" + i + "个,两分的需要" + j + "个,五分的需要" + h + "个。");
                            count++;
                        }
                    }
                }
            }
            Console.WriteLine("符合要求的可能性有" + count + "种。");

2、小张过年发了100元购物券,他要买香皂(5元),牙刷(2元),洗发水(20元),想要正好把100元花完,有几种购买组合?

            int a = 0;
            for (int i = 0; i <= 50; i++)
            {
                for (int j = 0; j <= 20; j++)
                {
                    for (int k = 0; k <= 5; k++)
                    {
                        if ((i * 2) + (j * 5) + (k * 20) == 100)
                        {
                            Console.WriteLine("小张可以买到" + i + "块香皂," + j + "只牙刷," + k + "瓶洗发水。");
                            a++;
                        }
                    }
                }
            }
            Console.WriteLine("符合条件的可能性有" + a + "种。");

3、百鸡百钱,有100文钱,要买100只鸡回家。公鸡2文钱一只,母鸡1文钱一只,小鸡半文钱一只,该如何买?

 

            int a = 0;
            for (int i = 0; i <= 50; i++)
            {
                for (int j = 0; j <= 100; j++)
                {
                    for (int k = 0; k <= 200; k++)
                    {
                        if ((i * 2) + j + (k * 0.5) == 100)//k*0.5 不可以写作 k/2 ! 因其中的0.5必须是固定的
                        {
                            if (i + j + k == 100)
                            {
                                Console.WriteLine("公鸡" + i + "只,母鸡" + j + "只,小鸡" + k + "只。");
                                a++;
                            }
                        }
                    }
                }
            }
            Console.WriteLine("一共有" + a + "");

posted @ 2016-05-24 14:20  露西&哈特菲利亚  阅读(659)  评论(0编辑  收藏  举报