系列文章目录
文章目录
一、斐波那契数
1.斐波那契数定义
斐波那契数列为1、1、2、3、5、8、13、21、34……此数列从第3项开始,每一项都等于前两项之和,递推公式为F(n)=F(n-1)+F(n-2),n≥3,F(1)=1,F(2)=1
2.斐波那契数类型题目
1.求解斐波那契数
斐波那契数列指的是这样一个数列 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233,377…这个数列从第3项开始,每一项都等于前两项之和。
代码如下:
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<malloc.h>
long long* Fibonacci(size_t N)//size_t是无符号的数
{
unsigned int n = 0;
long long* FibArray = malloc(sizeof(long long)*(N + 1));//用空间来换时间
FibArray[0] = 0;
if (N == 0)
{
return FibArray;
}
FibArray[1] = 1;
for (n = 2; n <= N; n++)
{
FibArray[n] = FibArray[n - 1] + FibArray[n - 2];
}
return FibArray;
}
int main()
{
int i = 0;
printf("请输入一个数:");
scanf("%d", &i);
long long* ret = Fibonacci(i);
printf("该数的斐波那契数是:%d\n", ret);
return 0;
}
2.求解一个数几步成为斐波那契数
假设一个数和斐波那契数比较
1.如果两数相等,步数为0。
2.如果数小于斐波那契数且存在斐波那契数中间,用绝对值函数abs求出相差的步数。
3.如果数不在斐波那契数中间,则用赋值一步一步往前直到数存在于两个斐波那契数中。
代码如下:
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<math.h>
int main()
{
int n = 0;
scanf("%d", &n);
int a1 = 0;
int a2 = 1;
int a3 = 0;
while (1)
{
if (n == a2)
{
printf("%d\n", 0);
break;
}
else if (n < a2)
{
if (abs(a1 - n)<abs(a2) - n)
{
printf("%d\n", abs(a1 - n));
}
else
{
printf("%d\n", abs(a2 - n));
}
break;
}
a3 = a1 + a2;
a1 = a2;
a2 = a3;
}
return 0;
}
二、字符串中空格转为符号
1.题目意思解读
存在一个字符数组,假如字符数组中有字符串“we are happy”其中中间两个空格转换为%20。
2.题目解题思路
1.先寻找字符串中空格个数
2.计算新的字符串把空格替换成%20新的长度,找到新的下标
3.从后往前处理空格
代码如下:
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<string.h>
void ReplaceSpace(char* str, int length)
{
int i = 0;
int spacecount = 0;
for (i = 0; i < length; i++) //1.统计空格个数
{
if (str[i] == ' ')
{
spacecount++;
}
}
int newlen = length + 2 * spacecount; //2.算出替换了%20后字符串新的长度的最后位置
int pos = newlen - 1; //计算最后一个字符的下标
for (i = length - 1; i >= 0; i--) //3.从后往前处理空格
{
if (str[i] == ' ')
{
str[pos--] = '0';
str[pos--] = '2';
str[pos--] = '%';
}
else //不是空格就在原来字符重新拷贝过去到arr的后面
{
str[pos--] = str[i];
}
}
}
int main()
{
char arr[1024] = "we are happy.";
int len = strlen(arr);
ReplaceSpace(arr, len);
printf("%s\n", arr);
return 0;
}
总结
<font color=#999AAA 以上就是今天要讲的两种类型的题目,本文仅仅简单介绍了斐波那契数的使用,而字符串种空格替换为别的字符也是常见题目,希望大家多多注意!另外,如果上述有任何问题,请懂哥指教,不过没关系,主要是自己能坚持,更希望有一起学习的同学可以帮我指正,但是如果可以请温柔一点跟我讲,爱与和平是永远的主题,爱各位了。
扫描二维码关注公众号,回复:
12925848 查看本文章