46家名企笔试题集:Java与算法挑战

需积分: 9 3 下载量 191 浏览量 更新于2024-07-28 收藏 345KB PDF 举报
"46家公司的Java笔试题目集锦" 这些题目涵盖了不同的编程和技术知识点,主要集中在C语言、数据结构、算法以及基础的编程概念上。以下是各题的详细解析: 1. Sony笔试题 - 完成星号图案: 这是一个简单的控制台输出图形的问题。根据已给出的星星图案,我们可以看出每一行的星星数量是前一行星星数量的两倍加一。所以,空白处应填写以下代码: ```c for(i=0; i<N; i++) { for(j=0; j<i; j++) printf(" "); for(k=0; k<(2*i+1); k++) printf("*"); printf("\n"); } ``` 这个循环结构用于打印每一行的空格和星星。 2. 完成程序,实现对数组的降序排序: 这是一个简单的排序问题,可以使用冒泡排序、选择排序或快速排序等算法。这里使用冒泡排序为例: ```c void sort() { int temp; for(i=0; i<sizeof(array)/sizeof(array[0])-1; i++) { for(j=0; j<sizeof(array)/sizeof(array[0])-1-i; j++) { if(array[j]>array[j+1]) { temp = array[j]; array[j] = array[j+1]; array[j+1] = temp; } } } } ``` 这段代码通过两层循环实现降序排列。 3. 费波那契数列求第10项: 斐波那契数列的第n项可以通过递归或动态规划计算。由于递归可能导致大量的重复计算,效率较低,这里提供一个使用循环的方法: ```c int Pheponatch(int N) { int fib[N+1]; fib[0] = 1; fib[1] = 1; for(int i=2; i<=N; i++) fib[i] = fib[i-1] + fib[i-2]; return fib[N]; } ``` 这种方法避免了递归带来的效率问题。 4. 程序崩溃修复: 此代码在尝试使用`append`函数时未定义`TNode`结构体,且没有结束`append`函数的调用。修复后的代码如下: ```c #include<stdio.h> #include<malloc.h> typedef struct{ int value; TNode* left; TNode* right; } TNode; TNode* root = NULL; void append(int N) { TNode* newNode = (TNode*)malloc(sizeof(TNode)); newNode->value = N; newNode->left = NULL; newNode->right = NULL; // 假设我们已经有了一个简单的插入函数insertNode,这里仅做演示 insertNode(&root, newNode); } int main() { append(63); append(45); append(32); return 0; } ``` 修复后,`TNode`结构体正确定义,`append`函数内创建新节点并插入到树中(需定义`insertNode`函数来完成具体操作)。 以上就是46家公司的Java笔试题目中的部分解题解析,这些问题涉及到了基本的编程技巧、数据结构、算法以及内存管理等重要知识点。在准备类似的笔试时,考生需要扎实掌握这些基础知识。