1113

昨天老湿复习了高级循环,讲了一些进阶的循环应用,然后在课程最后涉及了一点数组的知识,但是没有细讲,明天会详细讲。

关于高级循环的最后,我总结了几道老湿的题目,也是用来练手的几道高级循环应用题,在写代码的同时也复习一遍。

题目如下:

1,   迭代进阶:兔子生兔子的问题

2,   阶乘问题:求出10以内所有奇数的阶乘的和

3,   求平方和(1的平方+2的平方+3的平方+到10的平方)

4,   2的一次方+2的二次方+2的三次方+到2的十次方

这四道题目大概就是昨天上课老湿着重讲的题目,现在一题题的分析出来

首先第一题,一对新生兔到了第三个月就可以再次繁殖一对新生兔,而且以后的每个月都可以再生一对小兔子,假设中间没有兔子死亡的话,到了第24个月有多少对兔子?

这道题乍一看没有什么思路,但是老湿给我们用EXCEL表格写出了每个月兔子数的规律,就不难发现这道题的解法了:

112358132134
幼兔未成年成年成年成年成年成年成年成年
  幼兔未成年成年成年成年成年成年
   幼兔未成年成年成年成年成年
    幼兔未成年成年成年成年
    幼兔未成年成年成年成年
     幼兔未成年成年成年
     幼兔未成年成年成年
     幼兔未成年成年成年
      幼兔未成年成年
      幼兔未成年成年
      幼兔未成年成年
      幼兔未成年成年
      幼兔未成年成年
       幼兔未成年
       幼兔未成年
       幼兔未成年
       幼兔未成年
       幼兔未成年
       幼兔未成年
       幼兔未成年
       幼兔未成年
        幼兔
        幼兔
        幼兔
        幼兔
        幼兔
        幼兔
        幼兔
        幼兔
        幼兔
        幼兔
        幼兔
        幼兔
        幼兔
        幼兔

从上表不难看出,从第三个月开始,每个月的兔子数都是上两个月兔子的和,假设当月为n,n月的兔子数就等于n-1月的兔子数加上n-2月的兔子数,规律找到了,用循环语句不难写出结果:

int t1 =1,t2=1,sum=0;//t1是第一个月的兔子数,t2是第二个月的兔子数;

for(int i =3;i<=24;i++)//从第三个月才开始叠加兔子的数量,一直叠加到第二十四个月

{

  sum = t1+t2;//以下三行是解决这道题目的关键,第一行的意思是sum是上两个月兔子的和

  t2=t1;//第二行,上一个月的兔子数赋值为上两个月的兔子数。

    t1=sum;//第三行的意思是循环过后,这个月的兔子数重新赋值为上一个月的兔子数,

}

console.writeline(sum);//输出sum的值。

这道题最后的答案是  46368

可见兔子的繁殖能力多么强大……当然那只是题外话,关于这段代码有个值得注意的细节,在循环体里面第二三句是不可以颠倒顺序的,因为将t1的值赋值为sum以后,t2最后得到的值就跟sum相等了,这样答案就会有误差,所以一定要注意。

2 阶乘问题:求出10以内所有奇数的阶乘的和

那道题拿到以后首先要考虑的就是两层循环,一层是取10以内的偶数,一层是得出这个数字的阶乘。

关于阶乘,我这个数学不好的人当时还是不明白,比如9的阶乘(9!)它就等于9*8*7*6*5*4*3*2*1的积,再循环语句中,就等于i的值递加,然后每次i乘以本身再赋值回i,然后再递增次数就OK,至于求和就很简单了,创建一个空的整型变量每次叠加就OK

代码如下:

int sum=0;

for(int i =0;i<=10;i+=2)//得出小于10的所有偶数

{

  int j =1;

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

    {

      j*=n;

    }

  sum+=j;

}

console.writeline(sum);

重新回来做这道题的时候我又发现了一点需要注意的地方,变量j作为存储n每次递增相乘的变量,不能声明在第一层for循环的上面,如果把j定义在第一层for循环上面的话,最后的结果与我们预期的结果是不一样的,这样的话j的循环就加上了第一层for循环的十次,数值肯定要大很多。所以在声明一个变量的时候一定要注意位置不要写错。

3,   求平方和(1的平方+2的平方+3的平方+到10的平方)

这道题相对来说很简单,平方就是两次乘以数字本身就OK,求和跟上面一样,创建一个空的整型存储起来就好了。代码如下:

int sum=0;

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

{

  sum+=i*i;//每次i的平方都赋值于sum。

}

console.writeline(sum);

这道题比较简单,只用到了一层循环,规律也非常好找。

4,   2的一次方+2的二次方+2的三次方+到2的十次方

这道题要用到两层迭代,一层用来迭代每次乘以二的次数,第二层就是把每次的结果相加,分析规律以后,发现每次将i乘以二就能得出对应的次方数,再使用一个变量每次迭代上一次的积即可。代码如下:

int sum=0;

int j=1;

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

  {

    j*=2;//每次将j的值乘以2送回j,得到其次方值。

    sum+=j;

  }

console.writeline(sum);

这是老湿昨天讲的几道题,今天整理出来了,从中也复习了一遍,还有很多问题值得研究,好吧,我现在去研究了……

 

转载于:https://www.cnblogs.com/Dawn-z/archive/2012/11/13/2768773.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值