1、背景
好久没刷题了,觉得写代码,手有点生,这样可不行啊,于是就有了刷刷题的想法,正好也为将来找工作面试做好准备。(想起之前面的一家公司,项目经历谈的好好的,就是挂在笔试上来,人家出了一道很简单的入门级的题都没做出来,唉,太丢人了,搞得别人以为我是骗子呢,只会吹牛)
于是,就有了刷刷题,保持写代码的感觉的想法,坚持有空就写写吧。
2、开始正题
【----------------------------------------------2024-11-15--------------------------------------------------------】
第1道(入门):斐波那契数列
描述:大家都知道斐波那契数列,现在要求输入一个正整数 n ,请你输出斐波那契数列的第 n 项。
斐波那契数列的定义,fib(1)=1,fib(2)=1,fib(3)=fib(3-1)+fib(3-2)=2,fib(4)=fib(4-1)+fib(4-2)=3。、
输入描述:一个正整数n
返回值描述:输出一个正整数。
分析:这题很老了,有写递归函数实现的做法,但我觉得递归太耗内存了,一层层递归,所以我用的是迭代,保证从第3项开始,下一项为前两项的和,然后再更新前两项就行了。
实现的代码如下,通过了网站给的测试用例:
int Fibonacci(int n ) {
if(n <= 0)
return -1;
// write code here
//1 1 2 3 5 8 13 21
//1 2 3 4 5 6 7 8
int before = 1;
int now = 1;
int next = 2;
int i = 0;
if(n == 1)
return 1;
else if(n == 2)
return 1;
else
{
for(i = 2;i < n;i++)
{
next = before + now;
before = now;
now = next;
}
return next;
};
}
第2道(入门):反转字符串
描述:写出一个程序,接受一个字符串,然后输出该字符串反转后的字符串。(字符串长度不超过1000)
分析:这个题目很好理解,也很简单,但是用C语言实现比较麻烦点,但我想到一个稍微简单一点的办法,就是交换,用首尾交换,然后两端一直往中间交换,就可以实现反转字符串了,还是有点小聪明的,哈哈哈。
实现的代码如下,通过了网站给的测试用例:
char* solve(char* str ) {
// write code here
if(NULL == str)
return NULL;
char* temp = NULL;
temp = str;
int str_length = 0;
int i = 0;
char c_temp;
//get str length
while(*temp != '\0')
{
str_length++;
temp++;
}
//idea: first exchange last and so on
for(i = 0; i < str_length / 2; i++)
{
c_temp = str[i];
str[i] = str[str_length - i - 1];//头部的字符赋值为尾部的字符
str[str_length - i - 1] = c_temp;//尾部的字符赋值为头部的字符,从而实现反转
}
return str;
}
第3道(入门):判断是否为回文字符串
描述:给定一个长度为 n 的字符串,请编写一个函数判断该字符串是否回文。如果是回文请返回true,否则返回false。
字符串回文指该字符串正序与