C语言笔试题与答案解析

1. 斐波拉契数列的递归方法实现如下:

unsigned int fib(unsigned int n){
        if(n == 0 | n== 1)
                return 1;
        return fib(n-1)+fb(n-2);

}

非递归实现

int Fibonacci_2(int n) {
	int a = 0;
	int b = 1;
	int sum;
	if (n == 1) {
		return a;
	}
	if (n == 2) {
		return b;
	}
	for (int i = 0; i < n - 2; ++i) {
		sum = a + b;
		a = b;
		b = sum;
	}
	return sum;
}

定义一宏定义,翻转一个长整型的某BIT位

不会。。。

#define exchange(c) {

 c = (c & 0xaa) >> 1 | (c & 0x55) << 1;

c = (c & 0xcc) >> 2 | (c & 0x33) << 2;

 c = (c & 0xf0) >> 4 | (c & 0x0f) << 4;

}

2.c语言static的作用

1、隐藏

加了static就会对其他源文件隐藏。

2、保持变量内容的持久

static变量会在静态存储区完成唯一的一次初始化。

3、默认初始化为0

3.给定len个数的整型数组,找出数字连续最长序列的长度

力扣原题:力扣https://leetcode-cn.com/problems/longest-consecutive-sequence/

int longestConsecutive(vector& nums){
    unordered_set num_set;
    for(const int& num : nums){
        num_set.insert(num);
    } //去重

    int longestStreak = 0;

    for(const int& num : num_set) {
        if(!num_set.count(num - 1)) {
            int currentNum = num;
            int currentStreak = 1;

            while(num_set.count(currentNum + 1)) {
                currentNum += 1;
                currentStreak += 1;
            }

        longetStreak = max(longestStreak, currentStreak);
        }
     
    }
    return longestStreak;
}

4.定义一函数,把pHead指向的单向链表反向

        

struct ListNode{
    int val;
    struct ListNode *next;
    ListNode(int x) : val(x),next(null) {}
};

ListNode* ReverseList(ListNode* pHead) {
    ListNode *p, *q;
    //p指向头结点点下一个结点
    p = pHead->next;
    //将链表断开,头结点置为空
    pHead->next = NULL;
    //p不等于空向后遍历,直到找到最后一个结点
    while(p != NULL)
    {
        //q指向p后面的一个结点
        q = p->next;
        //将p链接到pHead后面的节点
        p->next = pHead->next;
        //将p链接到pHaed后面
        pHead->next = p;
        //将p指针往后挪动
        p = q;
    }
    return pHead;
}

你可能感兴趣的:(c语言)