1.斐波那契数列前一项与后一项比值为黄金分割数
#include<stdio.h>
#include<ctype.h>
#include<assert.h>
//斐波那契数列 1 1 2 3 5 8 13...
int main()
{
const int n = 20;
int ar[n] = { 1,1 };
for (int i = 2; i < n; ++i)
{
ar[i] = ar[i - 1] + ar[i - 2];
}
for (int i = 0; i < n; ++i)
{
printf("%d \n", ar[i]);
}
for (int i = 3; i < n - 1; ++i)
{
printf("%d/%d=>%f \n", ar[i], ar[i + 1], (double)ar[i] / ar[i + 1]);
}
return 0;
}
2.斐波那契数列求和
#include<stdio.h>
#include<ctype.h>
#include<assert.h>
//斐波那契数列 1 1 2 3 5 8 13...
int fun(int n)
{
int a = 1, b = 1, c = 1;
for (int i = 3; i <= n; ++i)
{
c = a + b;
a = b;
b = c;
}
return c;
}
int main()
{
int n = 0, sum = 0;
scanf_s("%d", &n);
sum = fun(n);
printf("%d \n", sum);
return 0;
}
3.斐波那契数列前n项求和(递归)
#include<stdio.h>
#include<ctype.h>
#include<assert.h>
int fun(int n)
{
int a = 1, b = 1, c = 1;
for (int i = 3; i <= n; ++i)
{
c = a + b;
a = b;
b = c;
}
return c;
}//时间复杂度 2^n次方 空间复杂度 n
int fac(int n)//计算第n位斐波那契数列的值
{
if (n <= 2)
{
return 1;
}
else
{
return fac(n - 1) + fac(n - 2);
}
}
int main()//斐波那契数列 1 1 2 3 5 8 13...
{
int n = 0, sum = 0;
scanf_s("%d", &n);
sum = fun(n);
printf("%d \n", sum);
return 0;
}
#include<stdio.h>
#include<ctype.h>
#include<assert.h>
int FindValue(int* br, int n, int val)//方法一
{
assert(br != nullptr);
int pos = -1;
for (int i = 0; i < n; ++i)
{
if (br[i] = val)
{
pos = i;
break;
}
}
return pos;
}
int FindValue(int* br, int n, int val)//方法二
{
assert(br != nullptr);
int pos = n - 1;
while (pos > = 0 && br[pos] != val)
{
--pos;
}
return pos;
}
int Find(int* br, int n, int val)
{
assert(br != nullptr);
if (n < 0 || br[n - 1] == val)
{
return n - 1;
}
else
{
return Find(br, n - 1, val);
}
}
int FindValue(int* br, int n, int val)//方法三
{
assert(br != nullptr);
if (br[n] = val)
{
return n;
}
else
{
n--;
}
}
int main()
{
int ar[] = { 23,56,89,23,45,100,90 };
int n = sizeof(ar) / sizeof(ar[0]);
int val;
scanf_s("%d", &val);
int pos = FindValue(ar, n, val);
printf("%d \n", pos);
return 0;
}
4.二分查询
#include<stdio.h>
#include<ctype.h>
#include<assert.h>
#include<limits.h>
int BinaryFindValue(const int* br, int n, int val)//二分查询
{
assert(br != nullptr);
int pos = -1;
int left = 0, right = n - 1;
while (left <= right)
{
int mid = (right + left) / 2;
if (val < br[mid])
{
right = mid - 1;
}
else if (val > br[mid])
{
left = mid + 1;
}
else
{
pos = mid;
break;
}
}
return pos;
}
int main()
{
int ar[] = { 12,23,34,45,56,67,78,89,90,100 };
int n = sizeof(ar) / sizeof(ar[0]);
int val;
scanf_s("%d", &val);
int pos = BinaryFindValue(ar, n, val);
printf("%d \n", pos);
return 0;
}