输入一个整数n,输出从一到n所有的奇数,用逗号间隔,每个词中间都用,但是最后不用逗号
#include <stdio.h>
int main()
{
int n;
scanf("%d",&n);
printf("%d",1);
for(int i=3;i<=n;i+=2)
printf(",%d",i);
}
不知道你这个问题是否已经解决, 如果还没有解决的话:方法一 :递推实现
本题很简单,可以用一个数组a来存储斐波拉切级数,其中数组的下标对应n的值。预设a[ 0 ], a[ i ]为0,即可自底向上推出n级的结果 a[n]。
#include <stdio.h> //导入stdio.h库,里面包含输入输出函数
int main() {
int n;
scanf("%d", &n);
int a[26];
a[0] = a[1] = 1;
for (int i = 2; i <= n; i++) {
a[i] = a[i - 1] + a[i - 2];
}
printf("%d\n", a[n]);
}
这是一个指数时间复杂度的算法,线性时间复杂度,可以接受。
方法二:递归实现
如果已经学过函数的话,可以递归实现:
#include <stdio.h> //导入stdio.h库,里面包含输入输出函数
/* 返回n级斐波拉契数 */
int fib(int n) {
if (n == 0 || n == 1)
return 1; //递归的终点
return fib(n - 1) + fib(n - 2); //递归调用自身
}
int main() {
int n;
scanf("%d", &n);
printf("%d\n", fib(n));
}
当然,这里的递归没有优化,其效率和递归层次的承受度很低。不过对于本题AC够了。
这是一个指数时间复杂度的算法,其中
,对...它就是优美的黄金分割率1.618...不过算法的运行效率随n呈指数增长,实在是不够优美.../(ㄒoㄒ)/~~
其他方法 :
实在学有余力的同学还可以去搜搜将斐波拉契数转化为矩阵的幂运算,并且是使用快速幂实现。这是一个对数时间复杂度的算法,也是目前来说求斐波拉契数的可以实践的最快算法。
本文给出了三种经典的计算斐波拉契数的算法,并且进行了简简单单的时间分析...对于时间复杂度和效率的分析初学者了解即可...主要是斐波拉契数列的问题太经典了,我遇见这个话题就忍不住多码了点字哈哈哈~
有任何问题欢迎评论交流,如果本文对您有帮助不妨点点赞,嘻嘻~