当前位置:   article > 正文

2019杭电计算机复试笔试回忆版_杭州电子科技大学 计算机复试笔试 知乎

杭州电子科技大学 计算机复试笔试 知乎

1.大家去电影院看电影,总共有n人来看电影,其中年龄不低于18岁的成年人的座位号为奇数,不满18岁的未成年人的座位号为偶数。现在请统计成年人与未成年的数目,以及他们在总人数里的比例。n<=1000。

样例输入:5 2 3 6 7 11

样例输出:3 0.60 2 0.40

  1. #include<cstdio>
  2. using namespace std;
  3. int n,man,child;
  4. double a1,a2;
  5. int main()
  6. {
  7. while(scanf("%d",&n)!=EOF&&n&&n<=1000)
  8. {
  9. man=0,child=0;
  10. for(int i=0;i<n;i++)
  11. {
  12. int m;
  13. scanf("%d",&m);
  14. if(m%2!=0)
  15. man++;
  16. else
  17. child++;
  18. }
  19. a1=(double)man/n;
  20. a2=(double)child/n;
  21. printf("%d %.2f %d %.2f\n",man,a1,child,a2);
  22. }
  23. return 0;
  24. }

2.leetcode011

给定 n 个非负整数 a1,a2,...,an,每个数代表坐标中的一个点 (iai) 。在坐标内画 n 条垂直线,垂直线 i 的两个端点分别为 (iai) 和 (i, 0)。找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。

说明:你不能倾斜容器,且 n 的值至少为 2。

图中垂直线代表输入数组 [1,8,6,2,5,4,8,3,7]。在此情况下,容器能够容纳水(表示为蓝色部分)的最大值为 49。

 

示例:

  1. 输入: [1,8,6,2,5,4,8,3,7](考试的时候给了数量n,n<=1000)
  2. 输出: 49

这题考试的时候没多想直接暴力了 后面看到还有双指针的办法 确实巧妙很多

暴力:时间复杂度高

  1. #include<cstdio>
  2. #include<algorithm>
  3. using namespace std;
  4. int n,a[1001];
  5. int main()
  6. {
  7. scanf("%d",&n);
  8. for(int i=0;i<n;i++)
  9. {
  10. scanf("%d",&a[i]);
  11. }
  12. int v=-1;
  13. for(int i=0;i<n;i++)
  14. for(int j=n-1;j>i;j--)
  15. {
  16. int temp=min(a[i],a[j]);
  17. v=max(v,(j-i)*temp);
  18. }
  19. printf("%d\n",v);
  20. return 0;
  21. }

双指针法:

  1. #include<cstdio>
  2. #include<algorithm>
  3. using namespace std;
  4. int n,a[1001];
  5. int main()
  6. {
  7. scanf("%d",&n);
  8. for(int i=0;i<n;i++)
  9. {
  10. scanf("%d",&a[i]);
  11. }
  12. int i=0;
  13. int j=n-1;
  14. int v=(n-1)*min(a[i],a[j]);
  15. while(i<j)
  16. {
  17. v=max(v,(j-i)*min(a[i],a[j]));
  18. if(a[i]<a[j])
  19. i++;
  20. else
  21. j--;
  22. }
  23. printf("%d\n",v);
  24. return 0;
  25. }

4.LeetCode547 Friend Circles 原题为英文

有个班级,里面有N个学生,他们之中有些是朋友有些不是,比如如果A是B的朋友,B是C的朋友,那么A就是C的间接朋友,我们定义所谓的朋友圈就是由直系和间接朋友所组成的群体。N的范围为 [1,200].

例子 1:

输入:

3
1 1 0
1 1 0
0 0 1
输出: 2

解释:第0个和第1个学生是直系朋友,所以记为1个朋友圈。第2个学生他没什么朋友也要算一个朋友圈,所以结果为2.

例子 2:

输入:

3
 1 1 0
 1 1 1
 0 1 1
输出: 1

解释:第0个和第1个学生是直系朋友,第1和第2个也是,所以第0和第2个学生是间接朋友,三个学生都在同个朋友圈里,返回1.

并查集:

  1. #include<cstdio>
  2. #include<cstring>
  3. using namespace std;
  4. int n,map[201][201],pre[201];//pre数组记录朋友圈中心,类比根节点
  5. int find(int x)//找根节点,并路径压缩
  6. {
  7. int p=x,temp;
  8. while(x!=pre[x])
  9. x=pre[x];
  10. while(p!=x)
  11. {
  12. temp=pre[p];
  13. pre[p]=x;
  14. p=temp;
  15. }
  16. return x;
  17. }
  18. int main()
  19. {
  20. while(scanf("%d",&n)!=EOF&&n)
  21. {
  22. memset(map,0,sizeof(map));//初始化矩阵数组
  23. for(int i=0;i<n;i++)
  24. for(int j=0;j<n;j++)
  25. {
  26. pre[i]=i;//初始化根节点数组
  27. scanf("%d",&map[i][j]);
  28. }
  29. for(int i=0;i<n;i++)
  30. for(int j=0;j<n;j++)
  31. {
  32. int a,b;
  33. if(i<j&&map[i][j]==1)//并集
  34. {
  35. a=find(i);
  36. b=find(j);
  37. if(a!=b)
  38. pre[a]=b;
  39. }
  40. }
  41. int cnt=0;
  42. for(int i=0;i<n;i++)//统计根节点未改变的结点的数目
  43. {
  44. if(pre[i]==i)
  45. cnt++;
  46. }
  47. printf("%d\n",cnt);
  48. return 0;
  49. }
  50. }

第三题的话因为篇幅长,有很多图,最重要的是我不会,嘿嘿,有点尴尬,就没在这里写出来,如果有大佬知道的话可以留言,我也希望能交流学习一下。

以后我会把之前做过的11页的题目和一些我特意准备过的题目陆续发出来。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/黑客灵魂/article/detail/749986
推荐阅读
相关标签
  

闽ICP备14008679号