46家公司经典笔试题集:编程与算法挑战

需积分: 9 0 下载量 133 浏览量 更新于2024-11-02 收藏 277KB PDF 举报
"46家公司笔试题.pdf" 这份资料包含了46家知名公司的典型笔试题目,旨在帮助求职者检验和提升自己的编程技能。其中涉及的问题类型多样,涵盖了C语言基础、算法与数据结构、递归等多个方面。 1. Sony笔试题: - 题目要求完成一个程序,根据已给出的部分输出星号(*)组成的图形。这是一道与字符串处理和控制流有关的题目,通常需要利用循环和条件判断来实现。在空白处填写适当的代码,使得程序能按规律打印出星号图案。 - 代码示例: ```c for(i=1; i<=N; i++) { for(j=1; j<=N-i; j++) printf(" "); for(k=1; k<=2*i-1; k++) printf("*"); printf("\n"); } ``` 2. 数组降序排序: - 题目要求编写一个函数`sort()`,用于对整型数组进行降序排列。这是一道关于排序算法的题目,可以采用冒泡排序、选择排序、插入排序或快速排序等方法。这里以简单的冒泡排序为例: ```c voidsort() { int temp; for(i=0; i<sizeof(array)/sizeof(array[0])-1; i++) for(j=0; j<sizeof(array)/sizeof(array[0])-i-1; j++) if(array[j]>array[j+1]) { temp = array[j]; array[j] = array[j+1]; array[j+1] = temp; } } ``` 3. 费波那契数列: - 编写程序求解费波那契数列的第十项。费波那契数列的定义是:F(0) = 0,F(1) = 1,F(n) = F(n-1) + F(n-2) (n >= 2)。可以选择递归或非递归方法实现。递归虽然直观,但对于较大的n会导致大量的重复计算,效率较低。这里展示一个非递归的动态规划方法: ```c int Pheponatch(int 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]; } ``` 4. 程序错误修复: - 给出的程序在尝试操作树节点结构体`TNode`时出现错误,因为没有定义`TNode`。要修复此问题,需要先定义`TNode`结构体: ```c typedef struct TNode { TNode* left; TNode* right; int value; } TNode; TNode* append(TNode* root, int N); ``` 然后,`append`函数需要接收当前根节点作为参数,并返回新的根节点,以便正确地构建二叉树: ```c TNode* append(TNode* root, int N) { // 实现二叉树的插入逻辑 } int main() { root = append(root, 63); root = append(root, 45); // ... } ``` 这些题目涵盖了编程基础、算法和数据结构等多个关键知识点,通过解答这些题目,可以帮助求职者熟悉常见的编程面试题型,提升编程能力。