北航考研复试
面试真题复习
复习科目重点
历年上机真题 + 算法笔记 + C语言上机作业
北京航天航空大学计算机学院复试
北枫凉
The greatest gift you can give yourself is that of education.
展开
-
c0706 交叉引用生成器
【问题描述】“交叉引用生成器”是指具有如下功能的程序:对输入的一篇文档,统计出现的所有单词及其所在的行号。将其结果以规定的格式输出。【输入形式】程序从crossin.txt读入一篇文档。该文档由若干行组成,每行中包含一些列的单词。行号由1开始计数。该文档的单词量能不超过200,每个单词最大长度不超过20个字符。【输出形式】将输入文档中出现的单词及其所在行号输出到文件crossout.t...原创 2020-04-07 00:40:36 · 1336 阅读 · 0 评论 -
C/C++语言实现二叉树统计单词
jiben yaoqiu原创 2020-04-06 00:01:05 · 627 阅读 · 0 评论 -
查找算法 顺序查找
/*2020/4/6线性查找*/#include<stdio.h>enum BOOL{ NO,YES};typedef enum BOOL BOOL;BOOL linear_search(int A[],int x){ int i; for(i = 0;i<10;i++) { if(A[i] == x) break; } if(i ...原创 2020-04-06 09:49:48 · 275 阅读 · 0 评论 -
查找算法 二分查找
/*020/4/6二分查找*/#include<stdio.h>/*二分查找:找到元素时返回元素下标,未找到时返回-1*/int binary_search(int A[],int n,int x){ int low,mid,high; low = 0; high = n-1; while(low <= high) { mid = (low + ...原创 2020-04-06 10:15:59 · 123 阅读 · 0 评论 -
动态规划 最长回文串
思想状态:dp[i][j]:表示S[i]到S[j]是否是回文串,是为1,不是为0状态转移方程:dp[i][j] = dp[i+1][j-1] ,S[i]==S[j]dp[i][j] = 0, ,S[i]!=S[j]1.边界:dp[i][i] = 1,dp[i][i+1] = (S[i] == S[i+1]) ? 1:02.枚举:不能够使用连续枚举的方法(这样有的...原创 2020-04-02 16:22:26 · 92 阅读 · 0 评论 -
动态规划 最长公共子序列
难点:状态:dp[i][j]表示A左边的i个字符和B右边的j个字符形成的子串的最长公共子序列的长度状态转换方程:if(A[i-1] == B[j-1]) dp[i][j] = dp[i-1][j-1] + 1;else dp[i][j] = max(dp[i-1][j],dp[i][j-1]);代码实现#include<stdio.h>#include<str...原创 2020-04-01 23:12:20 · 101 阅读 · 0 评论 -
c0606 最长升序子串
自做答案//2020/4/1#include<stdio.h>#include<string.h>const int maxn = 10010;char str[10010];int dp[10010];int main(){ int i,j; int len; scanf("%s",str); len = strl...原创 2020-04-01 21:38:44 · 687 阅读 · 0 评论 -
动态规划 最长不下降子序列
难点状态:以A[i]结尾的最长不下降子序列状态转移方程:dp[i] = max(1,dp[j]+1)代码实现#include<stdio.h>const int maxn = 1000;int A[maxn],dp[maxn];int main(){ int i,j; int n; scanf("%d",&n); for...原创 2020-04-01 21:19:29 · 238 阅读 · 0 评论 -
动态规划 最长连续子序列和
难点:主要是状态和状态转移方程的设置状态:dp[i]表示的是必须以A[i]结尾的连续序列的最大和状态转移方程:dp[i] = max(A[i],dp[i-1]+A[i])代码实现//北航机试2020/4/1#include<stdio.h>int max(int a,int b){ if(a>b) return a; else ret...原创 2020-04-01 20:47:06 · 184 阅读 · 0 评论 -
动态规划 入门2
数塔问题(动态规划的递推写法):数塔问题中也存在着大量的重复计算。利用递推从下往上计算,存在着状态转移方程dp[i][j] = max(dp[i+1][j],dp[i+1][i+1]) + f[i][j]代码实现#include<stdio.h>#include<algorithm>using namespace std;const int maxn ...原创 2020-03-31 23:18:32 · 105 阅读 · 0 评论 -
动态规划 入门1
Fibonacci数列动态规划的写法:这是一种动态规划的递归实现(又称记忆化实现),解决大量的重复计算问题。#include<stdio.h>#include<algorithm>using namespace std;int dp[100];int Fib(int n){ if(n == 0||n==1) return 1;//递归边界 ...原创 2020-03-31 22:46:48 · 97 阅读 · 0 评论 -
c0605 超长正整数的加法
【问题描述】编写程序实现两个超长正整数(每个最长80位数字)的加法运算。【输入形式】从键盘读入两个整数,要考虑输入高位可能为0的情况(如00083)。第一行是超长正整数A;第二行是超长正整数B;【输出形式】输出只有一行,是两个长整数的运算结果,从高到低依次输出各位数字。各位数字紧密输出。算法提示:1.用字符串输入两个超长整数,分别存放在两个字符串中,每一位对应一个字符串中的字符...原创 2020-03-31 21:55:46 · 486 阅读 · 0 评论 -
c0604 旋转魔方阵
【问题描述】输入一个自然数N(2≤N≤9),要求输出如下的魔方阵,即边长为NN,元素取值为1至NN,1在左上角,呈顺时针方向依次放置各元素。N=3时:1 2 38 9 47 6 5【输入形式】从标准输入读取一个整数N。【输出形式】将结果输出到文件文件file.out。输出符合要求的方阵,每个数字占5个字符宽度,向右对齐,在每一行末均输出一个回车符。【输入样例】4【输出样例】...原创 2020-03-31 20:41:06 · 1932 阅读 · 0 评论 -
c0602字符串中字符排序
【问题描述】编写一个程序,从键盘接收一个字符串,然后按照字符顺序从小到大进行排序,并删除重复的字符。自做答案:不使用集合set#include<stdio.h>#include<string.h>#include<algorithm>using namespace std;char str[1000];char ans[1000];int...原创 2020-03-31 15:12:08 · 346 阅读 · 0 评论 -
c0601矩阵运算
【问题描述】对于多个N阶矩阵,依次进行加、减运算。代码实现//2020/3/21#include<stdio.h>const int MAX = 20;int N;void input_matric(int B[MAX][MAX]){ int i,j; for(i = 0;i<N;i++) { for(j = 0;j...原创 2020-03-31 14:29:35 · 1200 阅读 · 0 评论 -
快速排序--选取A[0]做主元,随机选取做主元,三点中值做主元
代码实现以及现象分析//北航机试2020/3/28/*头中尾三位取中针对不同的数据量*/#include<stdio.h>#include<stdlib.h>#include<time.h>#include<algorithm>using namespace std;#define MAXN 10000000int...原创 2020-03-29 01:01:57 · 463 阅读 · 0 评论 -
快速排序--三元选中值代码实现
三元选中值代码实现三点选中位主元,针对不同的Cutoff运行结果,以及是否使用Cutoff的运行结果//北航机试2020/3/28/*头中尾三位取中针对不同的数据量*/#include<stdio.h>#include<stdlib.h>#include<time.h>#include<algorithm>using n...原创 2020-03-28 18:24:58 · 316 阅读 · 0 评论 -
C语言 全局变量和局部变量的申请
今天在学习排序算法比较性能的时候,针对数组的申请出现了问题。然后就去寻找为什么?#include <stdio.h>int main(){ int a[1000000];//局部变量 return 0;}//编译运行后发现溢出错误#include <stdio.h>int a[1000000];//全局变量int main(){ return 0;...原创 2020-03-28 18:15:59 · 1184 阅读 · 1 评论 -
希尔排序
首先回顾插入排序:算法思想:将待排序列分成两个子序列,其中一个有序,另外一个无序。每次从无序序列选取第一个元素,插入到有序序列中,直到所有的元素全部插入。实现待排序列:L[1…N]开始时,有序序列为空,无序序列为待排序列。可以假设待排序列中的第一个元素形成的序列为有序序列L[1](因为一个元素自身肯定是有序的,剩下的N-1个元素形成的是无序序列L[2…N]。这样总共就需要插入N-1...原创 2020-03-28 16:15:02 · 423 阅读 · 0 评论 -
C/C++计算程序运行的时间
使用方法#include<stdio.h>#include<time.h>//使用其中的clock()函数int main(){ colck_t start,end; start = clock(); //function() end = clock(); //需要强制类型转换为(double) printf("%f\n",(double)(end-...原创 2020-03-28 10:53:49 · 566 阅读 · 0 评论 -
C/C++中随机数的产生
在实际编程中,我们经常需要生成随机数,例如,贪吃蛇游戏中在随机的位置出现食物,扑克牌游戏中随机发牌。在C语言中,我们一般使用 <stdlib.h> 头文件中的 rand() 函数来生成随机数,它的用法为int rand (void);void 表示不需要传递参数。rand() 会随机生成一个位于 0 ~ RAND_MAX 之间的整数。RAND_MAX 是 <stdlib...原创 2020-03-28 10:23:43 · 201 阅读 · 0 评论 -
PAT A1052
1052 Linked List Sorting (25分)A linked list consists of a series of structures, which are not necessarily adjacent in memory. We assume that each structure contains an integer key and a Next pointer ...原创 2020-03-27 23:07:27 · 98 阅读 · 0 评论 -
PAT A1032
1032 Sharing (25分)To store English words, one method is to use linked lists and store a word letter by letter. To save some space, we may let the words share the same sublist if they share the same ...原创 2020-03-27 22:07:52 · 160 阅读 · 0 评论 -
codeup 1918 简单计算器
简单计算器题目描述读入一个只包含 +, -, *, / 的非负整数计算表达式,计算该表达式的值。输入测试输入包含若干测试用例,每个测试用例占一行,每行不超过200个字符,整数和运算符之间用一个空格分隔。没有非法表达式。当一行中只有0时输入结束,相应的结果不要输出。输出对每个测试用例输出1行,即该表达式的值,精确到小数点后2位。样例输入 Copy30 / 90 - 26 + 97 -...原创 2020-03-27 18:52:31 · 196 阅读 · 0 评论 -
STL--queue队列的使用
队列常用的操作1.清空clear()2.大小size()3.判空empty()4.入队push()5.出队pop()—队首元素出队6.访问队首元素font()7.访问队尾元素back()//出队入队和访问元素注意:出队和访问元素(队首元素,队尾元素)的时候,都要判空STL中没有实现队列的清空clear()操作 //清空操作 while(!q.emp...原创 2020-03-27 15:37:33 · 356 阅读 · 0 评论 -
STL--stack栈的使用
栈的常用操作:1.清空clear()2.大小size()3.判空empty()4.入栈push()5.出栈pop()6.栈顶元素top()注意点:在使用pop()和top()函数的时候,需要先判断是否栈为空STL中没有清空clear()函数,需要自己编写:while(!s.empty())//判空 { s.pop();//出栈 }...原创 2020-03-27 15:10:21 · 869 阅读 · 0 评论 -
排序算法稳定性的作用
稳定性算法相对于不稳定性算法,有什么特别的用么,反正是等值,谁先谁后,不都一个样子么?实际业务中,可能会按多个属性排序。比如这么一个场景:有一批订单,按日期降序排列,如果日期一样的,按订单金额降序。这个需要很好理解,实现起来,可能就没那么容易,按日期排好了,再把日期一样的按订单金额排一次。这个就不好实现,先把日期一样的分别取出来排下,再对应放回去,很麻烦。有了稳定性排序算法,就很容易实现。第...原创 2020-03-26 10:24:31 · 854 阅读 · 0 评论 -
冒泡排序和插入排序的比较
通过冒泡排序(改进后)和插入排序的学习,发现两者有相似的地方,并且在元素基本有序的情况下的,两者之间的性能比较有困惑。因为同样在最好的情况下(序列有序)的时间复杂度是O(N),并且交换元素的次数都是逆序对的个数I,那么如何进一步的分析性能呢?到底谁更好呢?(暗示一下:两种算法元素交换的次数都是逆序对的次数)冒泡排序法和插入排序法的核心思想就是元素交换,虽然整体的结构都是两层的循环嵌套,但...原创 2020-03-26 10:01:18 · 3539 阅读 · 0 评论 -
表排序
什么情况下会用到表排序呢?就是待排的元素不是简简单单的整数,比如说一个十分复杂的结构体,例如一本书的内容,但需要移动一个元素的时候,移动元素的时间是不能够忽略不计的。于是如果简单调用快速排序或者其他排序算法,他们都是需要频繁的交换或者移动元素。如果这个元素是书或者课本的时候,元素移动的时间就是一个很恐怖的事情 。表排序是这样的一个算法,在实际的过程中是不需要移动元素的,需要移动的只是指向这些元...原创 2020-03-25 23:54:47 · 389 阅读 · 1 评论 -
快速排序--实现思想,复杂度分析,各种实现方法的优劣
快速排序算法思想 快速排序可能是现实应用中最多的一种,但是没有一种排序算法能适应所有的情况,在最糟糕的情况下,快速排序性能就比较差了。但是对于大多数情况下,对于大量的随机数据的排序,快速排序算法的效率还是非常高的。(前提是将快速排序算法实现的小细节实现到位,快速排序的特点是自己编写是容易写错)它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分...原创 2020-03-25 22:41:34 · 543 阅读 · 0 评论 -
5-6 判断出栈序列
【问题描述】对于一个栈,已知元素的进栈序列,判断一个由栈中所有元素组成的排列是否是可能的出栈序列。比如,进栈序列为1 2 3 4,则可能的出栈序列有4 3 2 1,1 4 3 2等。而1 4 2 3就不是。【输入形式】从标准输入读取第一行是一个整数N(3≤N≤10),代表有N个元素,其进栈序列是1 2 3 …… N。第二行是空格分隔的1~N的数字的一个排列。【输出形式】向标准输出打印结果。...原创 2020-03-24 15:59:15 · 388 阅读 · 0 评论 -
5-5扩展字符
【问题描述】编写一函数expand(s1,s2),用以将字符串s1中的缩记符号在字符串s2中扩展为等价的完整字符,例如将a-d扩展为abcd。该函数可以处理大小写字母和数字,并可以处理a-b-c、a-z0-9与-az等类似的情况。在main函数中测试该函数:从键盘输入包含缩记符号的字符串,然后调用该函数进行扩展,输出扩展结果。(教材 P63:Exercise 3-3)注意:待扩展字符串中有可...原创 2020-03-24 15:07:30 · 592 阅读 · 0 评论 -
归并排序
归并排序算法思想归并排序算法思想的核心是有序子序列的合并 原始的Merge()函数的处理: - 数组A[],指针Aptr - 数组B[],,指针Bptr - 新增的数组C[],指针Cptr 并且很容易知道Merge()函数的时间复杂度是O(N). 归并排序的Merge()函数的处理: - 因为排序的是一个数组,故要分成两部分 - ...原创 2020-03-24 11:59:49 · 161 阅读 · 0 评论 -
LeetCode 1 两数之和
两数之和给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。示例:给定 nums = [2, 7, 11, 15], target = 9因为 nums[0] + nums[1] = 2 + 7 = 9所以返回 [0, 1]方法1...原创 2020-03-24 09:05:38 · 73 阅读 · 0 评论 -
如何高效的使用力扣
编程能力就像任何其他技能一样,也是一个可以通过刻意练习大大提高的。大多数经典面试题目都有多种解决方案。 为了达到最佳的练习效果,题目练习两遍,如果可以的话,三遍会更好。在第二遍练习时,你可能会发现一些新的技巧或新的方法。 到第三遍的时候,你会发现你的代码要比第一次提交时更加简洁。 如果你达到了这样的效果,那么恭喜你,你已经掌握了正确的练习方法!记住:刻意练习并不意味着寻找答案并记住它,这种练...原创 2020-03-24 08:37:24 · 9296 阅读 · 0 评论 -
编程之道
编程能力就像任何其他技能一样,也是一个可以通过刻意练习大大提高的。大多数经典面试题目都有多种解决方案。 为了达到最佳的练习效果,至少将经典的题目练习两遍,如果可以的话,三遍会更好。在第二遍练习时,你可能会发现一些新的技巧或新的方法。 到第三遍的时候,你会发现你的代码要比第一次提交时更加简洁。 如果你达到了这样的效果,那么恭喜你,你已经掌握了正确的练习方法!记住:刻意练习并不意味着寻找答案并记...原创 2020-03-23 22:52:21 · 112 阅读 · 0 评论 -
5-4 删数问题
【问题描述】输入一个高精度的大正整数S(S最长可达240位),去掉其中任意N位数字后剩下的数字按原次序组成一个新的正整数S’。编程对给定的N和S,寻找一种方案使得剩下的数字组成的新数S’最小。【输入形式】输入有两行:1.第一行是大整数S。其中S最长可达240位。2.第二行是整数N。S、N均以非0数字开头。【输出形式】输出有一行,是在S中删除N位后所得的最小数字S’。【样例输入】17...原创 2020-03-23 22:35:49 · 2616 阅读 · 0 评论 -
5-3 凸多边形面积
【问题描述】给出平面上一组顶点的坐标,计算出它们所围成的凸多边形的面积。【输入形式】从标准输入读取顶点坐标。格式为:第一行是点的个数N(3≤N≤15),后面紧接着N行,每行两个数字 (由空格隔开),分别表示该点的X、Y坐标(0≤X,Y≤32767)。所有点的坐标互不相同,且按顺时针次序给出。输入数据确保该多边形是一个凸多边形。【输出形式】向标准输出打印一个浮点数,是该多边形的面积。该浮...原创 2020-03-23 21:25:44 · 4529 阅读 · 5 评论 -
8-3 单词排序
【问题描述】编写一个程序,从文件sort.in中读入单词(即:以空格分隔的字符串),并对单词进行排序,删除重复出现的单词,然后将结果输出到另一个文件sort.out中。【输入形式】输入文件名和输出文件名分别为sort.in和sort.out。输入文件的内容是用空格隔开的多个单词。【输出形式】对单词进行排序,删除重复出现的单词,然后将结果输出到文件sort.out中。【输入样例】假如s...原创 2020-03-23 20:33:34 · 1019 阅读 · 0 评论 -
8-2 括号匹配
【问题描述】假设一个输入字符串中包含圆括号、方括号和花括号三种类型的括号,以及其它一些任意字符.编写程序,判别串中的括号是否正确匹配,即:1.各种左、右括号的个数要一致;2.不能先出现右括号;【输入形式】从当前目录下correct.in文件中读入一行字符串.字符串最大长度80,不含空格.【输出形式】输出到当前目录下correct.out文件中.输出只有一个单词,如果括号匹配则输出“T...原创 2020-03-23 18:03:23 · 557 阅读 · 0 评论