我已经为自己设定了编写此算法的任务,但是,由于我还没有完整的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
答案 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 */