A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月
    后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?
1.程序分析: 兔子的规律为数列1,1,2,3,5,8,13,21....

#include <stdio.h>
int main ()
{
    long f1,f2;
    int i;
    f1=f2=1;
    for(i=1; i<=10; i++)
    {
        printf("%12ld%12ld",f1,f2);
        if(i%2==0)
        {
            printf("\n");//控制输出每行四个

        }
        f1=f1+f2;//前2个月加起来赋值给第三个月
        f2=f1+f2;//前2个月加起来赋值给第三个月

        //printf("%d",i);
    }
    return 0;
}

问题1:当i=12的时候为什么输出的是24个月啊?
问题2:(i%2==0)为什么是控制每行是4个?
问题3:f1=f1+f2了都怎么第二个月输出还是1啊?
本人新手实在看不懂,各位高手不要笑话我哈!!!!

7 个回复

倒序浏览
把变量都定义为整形,你这样知己都把自己绕蒙了.......兄弟
回复 使用道具 举报
学习了。。。。
回复 使用道具 举报
int test(int n)
{
    if (n==1||n==2)
    {
        return 2;
    }
    return test(n-2)+test(n-1);
}
可以用递归方法,编个函数来求
回复 使用道具 举报
  1. #include <stdio.h>

  2. int main(int argc, const char * argv[]) {
  3.     // insert code here...
  4.     long f1=1,f2=1;
  5.     for (int i=1; i<=12; i++) {
  6.         if (i<=2) {
  7.             printf("%d\t",1);
  8.         }
  9.         else{
  10.             long temp,temp1;
  11.             temp1 = f2;
  12.             temp = f1+temp1;
  13.             f2 = temp;
  14.             f1 =temp1;
  15.             printf("%ld\t",f2);
  16.         }
  17.         if (i%4==0) {
  18.             printf("\n");
  19.         }
  20.         
  21.     }
  22.     return 0;
  23. }
复制代码

看不懂楼主写的什么意思,这是我写的代码,能够实现每输入4个换行,你那个是每输入2个换行,希望对你有帮助,共同学习!
回复 使用道具 举报
使用递归函数试试看
回复 使用道具 举报
sdzh 中级黑马 2015-6-23 14:13:09
7#
楼上都是高手,这里我只针对楼主提的问题作答:


问题1:当i=12的时候为什么输出的是24个月啊?
解答:
你有没有注意到,在for循环内的 printf("%12ld%12ld",f1,f2);
也就是说,你没循环一次就打印两个月的数字;

问题2:(i%2==0)为什么是控制每行是4个?
解答:如果你明白问题1,那么这你应该也能懂了吧。
(i%2==0)意识是循环两次就换行,而你没循环一次就能打印两个数,也就造成了控制每行4个的结果。

问题3:f1=f1+f2了都怎么第二个月输出还是1啊?
解答:原因是在执行 f1=f1+f2之前就已经输出一月和二月的数了
回复 使用道具 举报
aofex 中级黑马 2015-6-23 20:32:50
8#
sdzh 发表于 2015-6-23 14:13
楼上都是高手,这里我只针对楼主提的问题作答:

哥儿们 感谢了啊 明白了
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马