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

 

posted @ 2016-03-11 14:52  陌上初薰  阅读(150)  评论(0编辑  收藏  举报