回 帖 发 新 帖 刷新版面

主题:递增牛群问题!

f=f1+f3;
        f3=f2;
        f2=f1;
        f1=f;
这段代码想不明白,既然f=f1+f3
那么还要f2=f1干什么?f的公式里的都不含f2!是否错了?我在这论坛的老贴里找到的!

回复列表 (共17个回复)

沙发

f=f1+f3;
f3=f2;//记录为新的f3
f2=f1;//记录为新的f2
f1=f;//记录为新的f1
f2其实就是一个中间变量,一个f1,f2之间的中间变量

板凳

所以没有问题,呵呵,如果没有中间变量那么f3,f1的值怎么保存啊,好好想想是不是,啊,加油,慢慢.

3 楼

光有这点东西不足以说明问题
楼上解释也未必合理
把完整问题和程序贴出来再帮你具体分析

4 楼

/*递增的牛群*/

#include <stdio.h>

int main(void)
{
    int i,year,f,f1,f2,f3;
    printf("Enter year:");
    scanf("%d",&year);

    for(i=1;i<=year;i++)
    {
        if(i<4)
            f=f1=f2=f3=1;
        else
        {
        f=f1+f3;
        f3=f2;
        f2=f1;
        f1=f;
        }
        printf("i=%2d n=%3d\n",i,f);
    }
    getch();
    return 0;
}

5 楼


那个广义fibonacci问题
晕死
貌似这个实现思路还是我自己提出来的……
关键问题在于
每过一年
当年的量等于相对于今年的第一年和第三年的数量和
然后今年过完,
f3=f2  原先的两年前变成了三年前,
f2=f1 原先的去年变成了两年前
f1=f 原先的今年变成了去年
明白了吗?

6 楼

既然f=f1+f3
那么还要f2=f1干什么?如果程序里没有f2=f1对程序的执行结果应该没什么影响吧!

7 楼

有影响
如果你去了那句
你执行5和6还有7
跟你不去那句作对比
看看有什么不同
提示:用注释的方法可以暂时删除语句

8 楼

有影响,为什么会产生这样的影响,我光看程序看不出来啊!

9 楼

或者在这里解释也不难
你第4年的结果是正确的
1 1 1 2
到了第5年
1 1 1 2 3应该无碍
第六年还是一样
1 1 1 2 3 4
第7年,没了f2=f1会打出5
因为你根本f3就不可能是1以外的值

10 楼

[quote]
然后今年过完,
f3=f2  原先的两年前变成了三年前,
f2=f1 原先的去年变成了两年前
f1=f 原先的今年变成了去年
[/quote]
这段不知道你看懂没有
如果去年的数值没有变成两年前的数值
那么f2始终=1
于是f3始终=1

我来回复

您尚未登录,请登录后再回复。点此登录或注册