机试两道题目:1.算法题 2.面向对象编程

时间:3h

第一道题写的乱七八糟后来发现写乱了;

第二题没时间看了,十几个文件实现一些函数,感觉不难但是需要时间静下心看,理清之间的关系。

之前群里会给你练手用的练习题,给的例题很简单,考的题目却很麻烦。

我在这里只给出第一题的我个人的解题思路。当然,可能不完全对,还望批评指正

1.算法题

这是我的草稿纸:思路大概就是,找到被侵略城市与其他城市的公共结点序列,找到最短的一条,然后断开最后一个结点与父亲的联系。

head.h

#pragma once
#include <stdio.h>
#include <iostream>
#include <string>
using namespace std;
#define MAXNUM 60000class tree {
public:tree(int n) {city = new int[n];}~tree() {delete[] city;}int *city;//盛放对应下标的父亲结点
};struct innerlink {//就是个放int型的单链表int k;struct innerlink *next;
};class linktable {
public:linktable() :l(NULL){}linktable(int n) :value(n), l(NULL) {}void insert(int b);public:int value;//对应的城市结点struct innerlink *l;//到根节点的路径
};

func.cpp

#include "head.h"void linktable::insert(int b) {innerlink *t = new innerlink;t->k = b;t->next = this->l;this->l = t;
}

main.cpp

#include "head.h"void func(tree &t, int *a);int n, q;//结点数、袭击次数
int main() {cin >> n >> q;tree t(n);int *a = new int[n];for (int i = 0; i < n; i++) {//给a数组全员赋0a[i] = 0;}t.city[0] = -1;//树根int cur;//临时变量for (int i = 1; i < n; i++) {cin >> cur;t.city[i] = cur - 1;//接口,因为内部数组下标从0计数}char switch_;//+或-int recruit;//城市结点for (int i = 0; i < q; i++) {cin >> switch_;cin >> recruit;if (switch_ == '+') {a[recruit - 1] = 1;//a数组指定位置 遭遇袭击func(t, a);//传入函数处理}else if (switch_ == '-') {a[recruit - 1] = 0;//a数组指定位置 解除危险func(t, a);传入函数处理}}cout << "Done" << endl;getchar(); getchar();return 0;
}void func(tree &t, int *a) {int *b = new int[n];//最终要断开的结点数组int count = 0;//此次遭遇袭击的城市数目for (int i = 0; i < n; i++) {b[i] = 0;//初始化 b断开结点的数组if (a[i])++count;//袭击的城市数目加一}linktable *l = new linktable[count];//“断开的链表”int index = 0;for (int i = 0; i < n; i++) {//建立 “断开的链表”if (a[i]) {l[index].value = i;int j = i;while (t.city[j] != -1) {l[index].insert(j);j = t.city[j];}++ index;}}//处理每一个 被袭击的城市结点,按照算法思路来for (int i = 0; i < count; i++) {int pos = l[i].value;//用于判断祖先是否断开while (t.city[pos] != 0 && b[t.city[pos]] == 0) {//找其祖先是否已经断开pos = t.city[pos];}if (t.city[pos] != 0) {//如果出现断开的continue;//下一个循环}else {//断开指定的一个结点与其父亲的连接int cur = MAXNUM;int cc;//临时变量innerlink *m, *n;for (int j = 0; j < count; j++) {   cc = 0;//每次都要赋0值,别忘了m = l[i].l;n = l[j].l;while (m && n && m->k == n->k) {m = m->next;n = n->next;++cc;}if (cc > 0 && cc < cur) {//选择最小值curcur = cc;}}m = l[i].l;--cur;while (cur) {m = m->next;--cur;}b[m->k] = 1;//链表中找到对应位置,断开b的对应位置(赋1)}}//输出显示int cut_num = 0;int total = 0;int father;//下面要用到的变量for (int i = 0; i < n; i++) {if (b[i]) {++cut_num;}father = i;bool son = true;for (int j = 0; j < n; j++) {if (t.city[j] == i) {son = false;break;}}if (son) {while (father != 0) {if (b[father]) {total++;break;}father = t.city[father];}}}//显示结果cout << cut_num << " " << total - count << endl;cout << "***测试:查看b数组内的情况***" << endl;for (int i = 0; i < n; i++) {//cout << b[i] << " ";//}//cout << endl;//cout << "*****************************" << endl;
}

算法总结:

1.对于下标从0还是1开始,其实完全按照自己的喜好即可,最后在输入输出处进行加减1即可。
2.先设计好数据结构(关键),考虑到各个步骤的大概可行性,不必分析具体的操作,把握好主要思路。

夏令营总结:

1.好好复习别的专业课(所擅长的,一题没问)
2.刷刷OJ,加深下C++知识
3.英语多练习下日常口语表达和发音
4.搞清楚自己想要什么

南京大学软件学院2019夏令营小记相关推荐

  1. 研究生平均年薪26.5万!本科生20万!南京大学软件学院19年就这么高!

    南京大学软件工程A级学科,软件学院有国家重点实验室,软件博士/硕士点都有,在985大学中也比较强. 之前我们找到了 南京大学软件学院2019年院系就业质量报告,说到了里面本科生的读研情况,今天我们看一 ...

  2. 2019保研南京大学软件学院后的一些感想

    2019计算机类保研 1.个人情况 1.1 保研结果 1.2 双非院校 1.3 学习成绩 1.4能力获奖 2. 求学之路 2.1 夏令营 2.2 北京邮电 2.3 东南软件 2.4 南大软件 2.4 ...

  3. 2019南京大学软件学院预推免

    2019南京大学软件学院预推免 都2020年入学一个月了才想起来写很久以前的预推免- 南软的夏令营和预推免流程差不多,都是机试+面试,然后会评等级,优秀良好及格,优秀会被优先录,我的评级是良好(多亏了 ...

  4. 2020南京大学软件学院夏令营模拟机试题集

    此文主要为了方便[想要参加南京大学软件学院]的同学熟悉机试题目类型.不知是否由于今年特殊原因,今年南软的机试类型和以往(一道算法题,一道面向对象编程题)不同. 注:南软通知入营后,会加入一个群聊,群文 ...

  5. 南京大学软件学院2018保研夏令营经验

    首先,我要说明的是我本人是南京大学软件学院本科生,所以对于外校生的保研经历可能了解的并不是很清楚,经验只供参考. 今年夏令营共四天,第一天是报到入营,第二天是讲座和导师介绍,第三天是面试和机考,第四天 ...

  6. 【20保研】大连理工大学软件学院2019年优秀大学生学术夏令营通知

    点击文末的阅读原文或者公众号界面左下角的保研夏令营或者公众号回复"夏令营"是计算机/软件等专业的所有保研夏令营信息集合,会一直更新的. 一.院系与学科介绍  大连理工大学软件工程学 ...

  7. 南京大学计院夏令营历年机试笔试题汇总(刷题版)

    温馨提示 必须熟悉输入输出,Java中是Scanner scan = new Scanner(System.in);(在Java.util包下) 必须熟悉各类集合框架,如HashMap.ArrayLi ...

  8. 南京大学软件学院读研有多强?读研国内只选三所!多人留学CMU!

    我在浏览南京大学软件学院官网的时候,偶然发现软件学院在2020-05-12发布的一份针对2019届毕业生的报告. 里面的内容超级丰富,我们来看一下: 可以看到,南京大学软件工程A级学科,有国家重点实验 ...

  9. 软工专业全国第二,南京大学软件学院逐年扩招

    1.院校介绍 南京大学软件学院是教育部首批国家级示范性软件学院.在2017年12月进行的教育部第四次学科评估的工作中,学院的软件工程专业全国排名第七,学科评估为A.软科2021中国大学专业排名中南京大 ...

最新文章

  1. boost::detail::spinlock_pool相关的测试程序
  2. 【21.37%】【codeforces 579D】Or Game
  3. hive中文字符乱码 解决方法【转】
  4. 转发程序无法决定链接类型
  5. 大数据分析实战-信用卡欺诈检测(四)-正则化惩罚
  6. 【都挺好】追求一生的科技住宅原来在这!
  7. 树的点分治(HDU 5977 2016ICPC大连 G: Garden of Eden)
  8. 年轻人,在公司混日子,伤害的是自己!
  9. WINDOWS PHONE死于自己不兼容
  10. b2c常用的erp系统
  11. poj2096(概率dp)
  12. 模块一 day09 文件操作相关
  13. 基于TI DLP技术的工业级DLP3010光机
  14. 嵌入式软件管培生每日总结-第6-7天
  15. PAT - 浙江大学计算机程序设计能力考试简介
  16. 数据、元数据、数据库、数据仓库、数据中心、数据中台、业务中台 、(垂直数据中心、全域数据中心(公共数据中心)、萃取数据中心)
  17. ECSHOP商城后台无法登陆
  18. hp打印机无法与计算机,HP打印机无法连接到计算机
  19. 入门OpenCV(Python版)(下)
  20. python中值滤波

热门文章

  1. 【硬件】电源选购解读手册
  2. 批量从合同文件(Word格式)提取合同要素信息
  3. 【java毕业设计】基于JAVA+JSP的企业合同管理系统设计与实现(毕业论文+程序源码)——企业合同管理系统
  4. 联想一体机 微型计算机6,联想一体机升级,配置AMD 6核处理器,直接16GB内存
  5. 高压放大器在改良电形成装置参数优化中的应用
  6. 前端学习之路—用css画一个圆形,三角形,椭圆
  7. linux下的/dev/shm目录
  8. Excel Series函数
  9. 乘着开源云的翅膀 | 从“铁信云”看中国铁路总公司转型之路
  10. 搜索引擎排名都选乐云seo_百度SEO排名规则-乐云SEO