程序生成迭代

时间:2014-12-12 12:23:17

标签: c file logic structure

我已经为自己设定了编写此算法的任务,但是,由于我还没有完整的C语言经验,我希望可能有一种更简单的方法。

好的,拿两个数字,     a,b

我们取这些的总和并添加到序列中,然后添加第二个术语。

所以我们得到了     a,b,a + b,b

对于下一学期,我们采用第二和第三个值(在我们做第一个和第二个之前)并再次进行。

所以我们现在得到

a , b , a+b , b , a +2b , a+b 

(续)a+2b , b , a+3b , a+2b , 2a+3b , a+b

这一直持续到任何时候,它不需要输入。

基本上我的算法如下:下一个是前一个b,下一个b是前一个a +前一个b。

但是,我不能使用通用方法在c中对此进行编码,因为它将使用给予序列的附加值,而不是第1,第2,第3值等。

我在想这可以通过写入文件并逐行扫描第n个数字来完成。但是,我认为我很难使这一点复杂化。

有没有办法可以从这个序列中取出第n个值?

输入:a = 1,b = 1。预期输出:1,1,2,1,3,2,3,1,4,3,5,2

2 个答案:

答案 0 :(得分:1)

你应该使用数组,这并不困难,它会比使用文件好得多。阅读一些文档,你应该能够在5分钟内使用它们。

数组只是一系列事物,在你的情况下是整数。 你可能会做这样的事情:

int main () {
    int array[MAX];
    array[0] = 1;
    array[1] = 1;
    // Print the starting values:
    printf("%d\n%d\n", array[0], array[1]);

    // The loop is controlled by i, increased in steps of 2.
    // j keeps the sequence of 1,2; 2,3; 3,4... used for the sum
    for (int i = 2, j = 0; i < MAX; i+=2, j++) {
        array[i] = array[j] + array[j+1];
        array[i+1] = array[j+1];
        printf("%d\n%d\n", array[i], array[i+1]);
    }
    return 0;
}

答案 1 :(得分:1)

&#34;下一个是前一个b,下一个b是前一个a +前一个b。&#34;如果您只是尝试获取第n个值,则可以使用刚刚描述的4个变量(这可以进行优化,但也可以编码以匹配描述):

int n = 12;
int i;
int preva = 1;
int prevb = 1;
int nexta;
int nextb;
    for(i = 2; i < n; i += 2){
        nexta = prevb;
        nextb = preva + prevb;
        preva = nexta;
        prevb = nextb;
    }
    if(i == n)
        /* output prevb */
    else
        /* output preva */