C 语言教程 在线

1685c-exercise-example11

参考方法:

#include<stdio.h>

int main()
{
    int yt=1,et=0,st=0,zt;   // 一兔 二兔 三兔 总兔 \(=_=)/
    for(int t=0;t<40;t++)//(" \t=tab  一个tab三个空格")
    { 
        st = et+st;              // 0  0  1  1
        et = (t == 0) ? 0 : yt;       // 0  1  0  1
        yt = (t == 0) ? 1 : st;       // 1  0  1  1
        zt = yt+et+st;           // 1  1  2  3......
        printf("%d\t月兔子有  %-10d \t 对\n",t+1,zt);
    }
}

1684c-exercise-example11

尽量使用最少的代码,最小的内存实现。不要使用斐波那契数列递归求解,因为这样会做许多无用功

#include <stdio.h>

int main()
{
    int now =1, prev_1= 1,prev_2=0;
    printf("%i\n", now);
    for(int i = 1;i<40;i++)
    {
        now = prev_1+prev_2;
        printf("%i\n", now);
        prev_2 = prev_1;
        prev_1 = now;
    }
}

1683c-exercise-example11

递归:斐波那契数列

#include<stdio.h>

int fibonaci(int i)
{
    if(i == 0)
    {
        return 0;
    }
    if(i == 1)
    {
        return 1;
    }
    return fibonaci(i-1) + fibonaci(i-2);
}

int main()
{
    int i;
    printf("month\tnumber\n");
    for (i = 1; i < 41; i++)
    {
        printf("%d\t%d\n", i,fibonaci(i));
    }

    return 0;
}

1682c-exercise-example11

使用数组方式:

#include <stdio.h>

int main()
{
    int n[41], i;    //定义

    n[0] = 0;    //赋值
    n[1] = 1;
    n[2] = 1;
    for (i = 3; i < 41; i++)
    {
        n[i] = n[i - 1] + n[i - 2];
    }

    printf("month\tnumber\n");    //输出
    for (i = 1; i < 41; i++)
    {
        printf("%d\t%d\n", i, n[i]);
    }

    //system("pause");
}

输出结果为:

1681c-exercise-example10

参考方法:

#include<stdio.h>

int main(void)
{
    printf("◎◎\n");
    for(int i=0;i<20;i++)
    {
        for(int j=0;j<=i+1;j++)
        {
            printf("■");
        }
        printf("\n");
    }
}