由于最近课程较多,所以更新的比较慢,接下来的一段时间会不定期更文;
在上篇文章中提到了C语言单选题的答案讲解,那么本篇文章开始编程题目的分析和讲解,
文章中有编程题的源码,请各位铁汁们注意接收和查看:
topic1原题链接:Fibonacci数列__牛客网
原题描述:
我的思路:一般情况:遍历前100项,知道N的值小于数组中的一个元素break,再然后比较N-fb(i-1)和 fib(i)-1的大小,
谁小输出谁的值。
特殊情况:N为1,输入为0;
求出前1000项的斐波那契的每一项,这里为什么前100项,因为N的范围是有限制的,
斐波那契前100和前1000项的取值在这里可以看一下:
源码:#includeint main() { int n = 0; scanf("%d", &n); if (n == 1) { printf("0n"); return 0; } int Fib[100] = { 0 }; Fib[0] = 1; Fib[1] = 1; int i = 0; for (i = 2; i < 100; i++) { Fib[i] = Fib[i-1] + Fib[i-2]; if (n <= Fib[i]) break; } //遍历数组 if (n - Fib[i - 1] <= Fib[i] - n) { printf("%dn", n - Fib[i - 1]); } else { printf("%dn", Fib[i] - n); } return 0; }
鹏哥的思路:
topic2原题链接:替换空格__牛客网
题目描述:
这这里很多人就会想了,在实际运用中真的会有这种情况吗?为什么会有这样的编程题?
下面打开一个搜索网页:
在实际的搜索中空格会被自动转化为其他字符填充,这样搜索才能是连续的;
这道题我在做的时候是没有通过测试用例的,所以这道题的答案是按照鹏哥的思路进行解释的;
鹏哥的思路:刚开始元素个数为len,后来空间为:
新的数组(只是数组空间变大)的空间为new+空格的数目*(3-1) ,因为每添加一个空格就会替换为3个字符,
实际上增加了两个字符。
定义两个常数end1表示原始数组的最后一个元素,end2表示新的数组的最后一个元素。
从end1指向的位置开始向拷贝,遇到空格的话增加两个字符end2- - 三次,end1- - 一次。
当end1和end2相同的时候停止。
源码:class Solution {
public:
void replaceSpace(char *str,int length) {
char* p = str;
int count = 0;
while(*p != ' ')
{
if(*p == ' ')
count++;
p++;
}
int newlength = length+2*count;
int end1 = length-1;
int end2 = newlength-1;
while(end1 != end2)
{
if(str[end1] != ' ')
{
str[end2--] = str[end1--];
}
else
{
str[end2--] = '0';
str[end2--] = '2';
str[end2--] = '%';
end1--;
}
}
}
};



