杭电17计算机复试题,2019杭电计算机复试笔试题

栏目:生活资讯  时间:2023-08-06
手机版

  1.电影院的座位分配为成年人的座位为奇数,非成年人的座位为偶数。现在输入一个N代表人数,依次输入N个有人的座位号,判断成年人有几个,所占比例是多少(保留小数点后两位),非成年人有几个,所占比例是多少(保留小数点后两位)。

  例:input: 5 5 3 2 6 11

  output:? 3? 0.60? 2? 0.40

  参考代码(c语言):

  #include

  using namespace std;

  int main(){

  int?? ?N; //总人数

  int adult = 0, child = 0; //成年人的人数 ?非成年人人数

  scanf("%d", &N);

  int temp;

  for(int i = 0; i < N; i++){

  scanf("%d", &temp);

  if(temp % 2 != 0) adult++;

  else child ++;

  }

  printf("%d %0.2lf %d %0.2lf

  ", adult, (double)adult/(double)N, child, (double)child/(double)N);

  return 0;

  }

  2.在二维坐标系中,做N条垂直线(与x轴垂直),起点为(i, 0),终点为(i, Yi)。i为自然数, 0<= i <= N。试从N条垂直线中取出2条并且与X轴形成一个凹型水槽,向其中注水,问如何选择垂线能使注入的水最多(即两条垂线的x坐标之差的绝对值乘上两条垂线段中y坐标较小的那个,得到的结果要最大)。先输入一个数N,代表垂线段的个数,在输入N个Yi(i = 0,1,2.....N-1)。

  例:input: 11 2 8 6 7 4 8 9 2 7?3?5

  output:? 49

  参考代码(c语言):

  #include

  #include

  using namespace std;

  int main(){

  int N;

  scanf("%d", &N);

  int a[N];

  for(int i = 0; i < N; i++)

  scanf("%d", &a[i]);

  int maxn = 0;

  for(int i = 0; i < N-2; i++){

  for(int j = i+1; j < N; j++)

  {

  int temp = (j-i)*min(a[i], a[j]);

  if( temp > maxn) maxn = temp;

  }

  }

  printf("%d

  ", maxn);

  return 0;

  }

  3.使用卷积神经网络将一张图片进行卷积处理。

  (1)给出卷积公式,还给出图片的边缘处理方式,要求用代码实现图片卷积的过程。

  (2)给出一张图片,让你画出卷积后的图片。

  (3)给出两个函数(已知,直接调用即可,不用实现),一个是图片读入函数,一个是图片保存函数。要求实现从图片读入,经过卷积变形,最后保存结果这么一个过程。//第三题还可以,直接依据已经存在的函数进行调用即可,所以说难题中也有可以拿分项

  /*

  本题是所有算法题目中最复杂的一题,关键是看不太懂,如果看懂了题目,实现起来应该不难。我这里只能给出题目的大概意思,一来是题目太长,二来是我对题目意思不太理解。

  */

  4.找朋友。假设A是B的朋友,那么B也是A的朋友,C与B为朋友,则C与A也为朋友,另外,自己与自己也是朋友。输入一个数N,代表人数,紧接着输入一个N*N的矩阵,1代表两个人是朋友,0代表两个人不是朋友。求有几个朋友圈。

  例:input: 3

  1 1 0

  1 1 0

  0 0 1

  output: 2

  参考代码(c语言):

  #include

  #include

  #include

  using namespace std;

  int main(){

  int N;

  scanf("%d", &N);

  int a[N][N]; //朋友关系矩阵

  for(int i = 0; i < N; i++)

  for(int j = 0; j < N; j++)

  scanf("%d", &a[i][j]);

  int vis[N]; //访问数组,1表示该节点已经访问过,0代表未访问过

  fill(vis, vis + N, 0); ?//初始化全为0

  int num = 0; //朋友圈数

  for(int i = 0; i < N; i++){ //i代表人的编号,这里要依此遍历每一个人

  if(vis[i] == 0){

  num++;

  queue q;

  q.push(i);

  vis[i] = 1;

  while(!q.empty()){

  int now = q.front();

  q.pop();

  for(int j = 0; j < N; j++){

  if(vis[j] == 0 && a[now][j] == 1){

  q.push(j);

  vis[j] = 1;

  }

  }

  }

  }

  }

  printf("%d

  ", num);

  return 0;

  }

  /*

  本题与算法笔记上的并查集那一节的例题相似,建议用并查集的思想来求解,我这里用的bfs来求解(O(num*N*N)),在考试中我用的是dfs的思想(我觉得dfs的时间复杂度是最高的)。本题的核心是求解连通块的数量,因此使用bfs或者dfs均可,但是在性能上并查集算法更优。建议学弟学妹把这题用bfs,dfs,并查集都实现一遍,这样对图的理解能够达到更深的层次

  */

  后记:考研结束了,虽然成绩并不靠前,但有幸能进入一个实验室继续深入学习。实验室很正规很严格,感觉我的三年研究生生活过的会和高中类似,或许会更辛苦,毕竟毕业还要一篇SCI论文。大学过的一般,挺轻松的,以至于毕业都找不到理想的工作,有点沮丧。希望研究生三年毕业后能浴火重生!与君共勉。

上一篇:肖战主演的六部电视剧,每一部都火爆全网,若都看过真爱粉无疑
下一篇:成吉思汗的奇葩爱好:细看他的后宫,就会发现传言不是“传言”