1.电影院的座位分配为成年人的座位为奇数,非成年人的座位为偶数。现在输入一个N代表人数,依次输入N个有人的座位号,判断成年人有几个,所占比例是多少(保留小数点后两位),非成年人有几个,所占比例是多少(保留小数点后两位)。
例:input: 5 5 3 2 6 11
output: 3 0.60 2 0.40
参考代码(c语言):
#include<cstdio>
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<cstdio>
#include<algorithm>
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<cstdio>
#include<queue>
#include<algorithm>
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<int> 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论文。大学过的一般,挺轻松的,以至于毕业都找不到理想的工作,有点沮丧。希望研究生三年毕业后能浴火重生!与君共勉。