gpt4 book ai didi

c - 间距斐波那契图对应于C中斐波那契数的长度

转载 作者:行者123 更新时间:2023-11-30 17:23:21 28 4
gpt4 key购买 nike

在表格中,n 值应与带有空格的值斐波那契线相匹配。

printf("n | ");  

for (i = 1; i < = n ; i++)
{
printf("%d", i);

for (wert=0; wert < = (hochn(fibo(i)) - hochn(i)) ; wert++)
{
printf(" ");
}
}

其他函数“hochn”计算 10 次幂的值。

int hochn (int b)
{
int tmp;

for(tmp =0; b > 10 ; tmp++)
{
b = (b / 10);
}

return tmp;
}

此外,“fibo”可查找斐波那契数的值。

程序的实际运行如下:

n | 1 2 3 4 5 6 7  8  9  10  11 12  13  14  
--------------------------------------------
f | 1 1 2 3 5 8 13 21 34 55 89 144 233 377

为什么n=11时只有1个空格,而n=12时又返回2个空格?

最佳答案

问题在于,对 hochn() 函数返回的值进行简单测试表明它会产生错误的答案。您的版本是下面代码中的 hochn0() ;固定版本是 hochn1()。我也包含了布局的测试代码。请注意,打印标题行时会在数字后面而不是前面放置空格,这也会使事情变得复杂,并在行尾留下尾随空格。您可能还会注意到您的问题以 7 开头,而不是 11。

在下面的代码中,我将函数设为静态,因为我使用的编译器选项要求在定义函数之前先声明函数。

#include <stdio.h>

static int hochn0(int b)
{
int tmp;

for (tmp = 0; b > 10; tmp++)
b = (b / 10);

return tmp;
}

/* hochn1() - return int(log10(b)) - 1, and 0 for b <= 0 */
static int hochn1(int b)
{
int tmp;

for (tmp = 0; (b /= 10) > 0; tmp++)
;

return tmp;
}

static int fibo(int n)
{
int f0 = 0;
int f1 = 1;
for (int i = 0; i < n - 1; i++)
{
int fn = f0 + f1;
f0 = f1;
f1 = fn;
}
return f1;
}

int main(void)
{
for (int i = 0; i < 120; i++)
{
int h0 = hochn0(i);
int h1 = hochn1(i);
if (h0 != h1)
printf("%3d: hochn0 = %d, hochn1 = %d\n", i, hochn0(i), hochn1(i));
}

int n = 14;

/* Broken - print spaces after number */
printf("n | ");
for (int i = 1; i <= n; i++)
{
printf("%d", i);
for (int wert = 0; wert <= (hochn0(fibo(i)) - hochn0(i)); wert++)
putchar(' ');
}
putchar('\n');

/* Fixed - print spaces before number */
printf("n |");
for (int i = 1; i <= n; i++)
{
for (int wert = 0; wert <= (hochn1(fibo(i)) - hochn1(i)); wert++)
putchar(' ');
printf("%d", i);
}
putchar('\n');

/* Succinct fixed */
int count = 0;
count += printf("n |");
for (int i = 1; i <= n; i++)
count += printf("%*s%d", (hochn1(fibo(i)) - hochn1(i)) + 1, " ", i);
putchar('\n');

for (int i = 0; i < count; i++)
putchar('-');
putchar('\n');

/* Result line */
printf("f |");
for (int i = 1; i <= n; i++)
printf(" %d", fibo(i));
putchar('\n');

return 0;
}

示例输出:

第一部分标识 hochn0()hochn1() 产生不同答案的数字。最后几行显示了输出在原始版本和几个修订版本中的显示方式。

 10: hochn0 = 0, hochn1 = 1
100: hochn0 = 1, hochn1 = 2
101: hochn0 = 1, hochn1 = 2
102: hochn0 = 1, hochn1 = 2
103: hochn0 = 1, hochn1 = 2
104: hochn0 = 1, hochn1 = 2
105: hochn0 = 1, hochn1 = 2
106: hochn0 = 1, hochn1 = 2
107: hochn0 = 1, hochn1 = 2
108: hochn0 = 1, hochn1 = 2
109: hochn0 = 1, hochn1 = 2
n | 1 2 3 4 5 6 7 8 9 10 11 12 13 14
n | 1 2 3 4 5 6 7 8 9 10 11 12 13 14
n | 1 2 3 4 5 6 7 8 9 10 11 12 13 14
------------------------------------------
f | 1 1 2 3 5 8 13 21 34 55 89 144 233 377

关于c - 间距斐波那契图对应于C中斐波那契数的长度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27629773/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com