知名公司笔试题合集:编程与算法挑战

需积分: 9 0 下载量 15 浏览量 更新于2024-07-28 收藏 277KB PDF 举报
"46家公司笔试题.pdf" 这些题目来自46家知名公司的笔试题库,旨在测试应聘者在计算机科学和编程方面的技能。以下是部分题目及其解析: 1. Sony笔试题: 这是一个C语言的编程题,要求完成一个程序,根据已有的星号模式打印出完整的图案。根据给出的模式,这是一个逐行打印星号的程序。空白处可能需要添加循环和条件判断来控制星号的打印。例如,可以使用两个嵌套的for循环,外层循环控制行数,内层循环控制每行的星号个数。 ```c #include<stdio.h> #define N 8 int main() { int i, j; for (i = 1; i <= N; i++) { for (j = 1; j <= i; j++) printf("*"); printf("\n"); } return 0; } ``` 2. 数组降序排序: 题目要求实现一个函数,对整型数组进行降序排列。这里可以使用冒泡排序、选择排序或快速排序等经典排序算法。以冒泡排序为例: ```c #include<stdio.h> void sort() { int array[] = {45, 56, 76, 234, 1, 34, 23, 2, 3}; int n = sizeof(array) / sizeof(array[0]); for (int i = 0; i < n - 1; i++) { for (int j = 0; j < n - 1 - i; j++) { if (array[j] > array[j + 1]) { int temp = array[j]; array[j] = array[j + 1]; array[j + 1] = temp; } } } } int main() { sort(); return 0; } ``` 3. 费波那契数列: 费波那契数列是每个数等于前两个数之和。递归方式虽然直观,但对于较大的N可能会导致栈溢出。因此,一般推荐使用循环或者动态规划来计算。以下是使用循环的方式: ```c #include<stdio.h> int Pheponatch(int N) { if (N <= 1) return N; int fib[N + 1]; fib[0] = 0; fib[1] = 1; for (int i = 2; i <= N; i++) fib[i] = fib[i - 1] + fib[i - 2]; return fib[N]; } int main() { printf("The 10th is %d", Pheponatch(10)); return 0; } ``` 4. 程序错误分析: 这段代码试图定义一个二叉树节点结构体并创建一个全局指针`root`,然后调用`append`函数向树中添加元素。问题是`append`函数没有定义,而且没有初始化`root`。首先,我们需要定义`append`函数,其次,在`main`函数之前,需要将`root`初始化为`NULL`。 ```c #include<stdio.h> #include<malloc.h> typedef struct { TNode* left; TNode* right; int value; } TNode; TNode* root = NULL; void append(int N) { // 定义并实现append函数,如插入节点 } int main() { append(63); append(45); // ... } ``` 以上是对题目中部分问题的解答,完整的解决方案需要根据具体题目要求补充完整代码。这些题目覆盖了基本的编程概念、数据结构(如数组和二叉树)以及算法(如排序和递归)。通过解决这些题目,应聘者可以展示他们的逻辑思维能力和编程技巧。