循环数组

循环数组

在程序中,存储的数据只使用一次之后再不会使用,如果将所有数据存储起来会浪费很大的空间,所以可以用循环数组来完成数据使用。我们用下面的例题来解释

例题

斐波那契数列中的每一项都是前两项的和。由1和2开始生成的斐波那契数列前10项为:

1, 2, 3, 5, 8, 13, 21, 34, 55, 89, …

考虑该斐波那契数列中不超过四百万的项,求其中为偶数的项之和。

例题解析

在不使用循环数组的情况下,可以开一个数组num[4000000](四百万项是肯定够的)来储存数据,然后通过计算来完成目的,这是我们不使用循环数组的做法。当使用循环数组时可以开一个数组num[3]来循环储存数据,这样就会节约大量空间。下面用伪代码解释原理

//假设求斐波那契数列第一项的数据(n = 1)(也就是求num[1]),那么复制时num[1]可以随便赋值,但(n = 1)num[(n + 1) % 3],num[(n + 2) % 3]代表斐波那契数列第一项前面的两项,分别赋值为1,0
//通过%3来完成数组的循环
int num[3] = {1, 0 , 0};
int n = 1;
while (num[(n + 2) % 3] + num[(n + 1) % 3] <= 4000000) {
    num[n % 3] = num[(n + 2) % 3] + num[(n + 1) % 3];
    n++;
}

代码演示

#include <stdio.h>

int main() {
    int f[3] = {1, 0, 0}, sum = 0, n = 1;
    while (f[(n + 2) % 3] + f[(n + 1) % 3] <= 4000000) {
        f[n % 3] = f[(n + 1) % 3] + f[(n + 2) % 3];
        if ((f[n % 3] & 1) == 0) sum += f[n % 3];
        n += 1;
    } 
    printf("%d\n", sum);
    return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值