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

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\n", 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\n", 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\n", num);

return 0;

}

/*

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

*/

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

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值