自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

不浪漫宇宙

学习是一场孤独的修行 / 此博主要发算法题解

  • 博客(67)
  • 收藏
  • 关注

原创 6-4 找最大字符串 (16分)

本题要求从键盘上输入多个字符串(约定每个串不超过20个字符且没有空格,最多10个字符串),用""作为输入结束的标记(""不作为有效的字符串)。再从所输入的若干字符串中,找出一个最大的串,并输出该串。 如果没有合法字符串,则输出“NO WORD”。 请完成主函数剩余部分以及自定义函数的编写。Count = Input(pStr, str);if (Count == 0) puts("NO WORD");else { Find_max(pStr, Count, &max); pri

2020-09-11 11:31:00 2043

原创 6-3 分词并显示 (16分)

程序的功能是:调用Input函数读入一个长度不超过81的字符串,字符串中只含字母和空格,遇到读满或者回车结束读入字符,空格用于分隔单词。请将字符串中用空格分隔的单词在屏幕上输出来。 要求用指针完成函数中各参数的传递与访问,自定义函数头和函数体中不得出现数组下标形式的表示法。void Input ( char *str ) { char x; x = getchar(); int i = 1; while(x != '\n' && i < 81) {

2020-09-11 11:02:23 3493 4

原创 两个有序链表序列的交集 (20分)

已知两个非降序链表序列S1与S2,设计函数构造出S1与S2的交集新链表S3。#include <stdio.h>#include <stdlib.h>typedef struct LNode{ int data; struct LNode *next;}LNode, *List;void create(List *L) { List head = NULL, p, tail; int x; scanf("%d", &x);

2020-09-10 17:52:16 1561

原创 共享后缀的链表 (25分)

有一种存储英文单词的方法,是把单词的所有字母串在一个单链表上。为了节省一点空间,如果有两个单词有同样的后缀,就让它们共享这个后缀。下图给出了单词“loading”和“being”的存储形式。本题要求你找出两个链表的公共后缀。PtrToNode Suffix( List L1, List L2 ) { List p1 = L1->Next; List p2 = L2->Next; List tmp = p1; int len1 = 0, len2 = 0;

2020-09-10 17:51:06 516

原创 单链表分段逆转 (25分)

给定一个带头结点的单链表和一个整数K,要求你将链表中的每K个结点做一次逆转。例如给定单链表 1→2→3→4→5→6 和 K=3,你需要将链表改造成 3→2→1→6→5→4;如果 K=4,则应该得到 4→3→2→1→5→6。void K_Reverse( List L, int K ) { List p = L; List q = p->Next; int len = 0; while(q) { q = q->Next; len++

2020-09-10 17:50:04 1256

原创 6-19 统计子串在母串出现的次数 (10分)

int fun(char *str,char *substr) { int count = 0; while(*str) { char *str1 = str, *str2 = substr; if (*str1 == *str2) { while(*str2) { if (*str1 != *str2) { break; }

2020-09-10 17:48:46 1654

原创 6-21 指定位置输出字符串 (12分)

char *match( char *s, char ch1, char ch2 ) { int i; for (i = 0; *(s+i); i++) { if (*(s+i) == ch1) break; } char *str = s + i; for (int j = i; *(s+j); j++) { printf("%c", *(s+j)); if (*(s+j) == ch2) break; }

2020-09-10 17:47:53 318

原创 7-3 选民投票 (10分)

7-3 选民投票 (10分)编程统计候选人的得票数。有若干位候选人(n<=10),候选人姓名从键盘输入(候选人姓名不区分大小写,姓名最长为9个字节),若干位选民,选民每次输入一个得票的候选人的名字(姓名最长为9个字节),若选民输错候选人姓名,则按废票处理。程序自动统计各候选人的得票结果,并按照得票数由高到低的顺序排序。最后输出各选票人得票结果和废票信息。#include <stdio.h>#include <string.h>struct p{ char nam

2020-08-31 23:58:16 5324

原创 递归基础

递归实现冒泡排序void bubble(int arr[], int L, int R){ if(L < R) { for(int i = L; i <= R-1;i++) { if(arr[i] > arr[i+1]) { int temp = arr[i]; arr[i] = arr[i+1]; arr[i+1] = temp; } } bubble(arr, L, R-1); }}辗转相除法求最大公约数in

2020-06-12 14:37:09 99

原创 【树】1020 Tree Traversals (25分) 树的遍历

原题链接

2020-06-12 10:17:03 127

原创 【树】1004 Counting Leaves (30分)数叶子节点

原题链接DFS + 邻接表(数组模拟)邻接表:对每一个点开一个单链表#include <iostream>#include <cstring>#include <algorithm>using namespace std;const int N = 110;int n, m; //节点总数,内部节点数量int h[N], e[N], ne[N], idx;int cnt[N]; //存每一层的叶子节点数int max_depth; //最大层数

2020-06-11 19:06:12 105

原创 并查集

在近乎O(1)的时间复杂度下支持两个操作:将两个集合合并询问两个元素是否在一个集合中基本原理:每个集合用一棵树维护,根节点的编号是整个集合的编号,对于每一个点都存储父节点,p[x]表示父节点,若想确定某个点属于哪一个集合,就先确定这个点的父节点,知道找到树根位置,根节点编号即数组编号。如何判断树根: p[x] = x如何求x的集合编号while(p[x] != x) x = p[x];如何合并两个集合:若px是x的集合编号,py是y的集合编号,p[x] = py;相当于把x

2020-06-11 18:07:05 104

原创 数组模拟单链表&双链表(静态链表)

单链表:邻接表(邻接表主要用于存储图和树,如最短路,最小生成树,最大流)双链表:优化用数组模拟单链表,首先需要定义表示val的数组e[N],表示某个点的next指针值的数组ne[N],e和ne之间用相同的下标关联,idx存储当前用到了哪个地址(相当于开始指向第一个结点的指针,每次把idx指向的结点分配出去之后,idx向后移动一位),head指向头结点。初始化void init(){ head = -1; idx = 0;}把新结点x插到头结点的位置把x的指针指向当前的头结点.

2020-06-11 17:22:03 188

原创 【Linux】控制台console和终端terminal有什么区别?

早期计算机是多人并用,每个人用一台叫做终端的设备(有显示器和键盘等)通过串口连接到计算机,这个终端设备本身不具有处理计算机信息的能力。控制台是计算机本身就有的设备,计算机启动的时候,所有的信息都会显示到控制台上。与终端不相关的信息,比如内核消息,后台服务消息,都可以显示到控制台上,但不会显示到终端上。由于现在都是一人用一台计算机,所以终端从硬件转变为了软件概念,比如在linux中的虚拟终端就是用计算机的软件来模拟以前的硬件。但是linux中已经完全淡化了控制台和终端的区别,已经把终端当作控制台来看待.

2020-05-27 16:01:42 591

原创 【解决方案】coursera网页登不上,视频无法打开-20.05.23-

点我白嫖coursera疫情时期免费开放课,截止时间7月31日准备:首先要网上学科,把Http代理调整为全局模式,否则打不开网站qaq原理介绍为了方便用户记忆,我们将IP地址变成了一个个的域名,用户不需要去记复杂的数字IP,把这个工作交给了计算机来做。我们键入域名后,计算机来把域名转换成对应的IP。网络上的DNS(Domain Name Server)就是用来进行域名解析的。在GFW(墙)的几种封锁方式中,有一种就是DNS污染,GFW会对域名解析过程进行干扰,主机就无法获取资源。网页打不开和视频加

2020-05-23 15:24:37 4608 5

原创 cs学生该如何高效学习?

多数事并不如你想的那样一帆风顺,但你却因此成为了可以乘风破浪的人。最近算是开始真正的自学,发现以前的学习方式有很多的问题,下面列几点自己觉得可以提高的地方。专注。提到专注,我以前是学习一个小时左右再休息,其实这样看似能学到很多东西,其实效率并不高,大概60%的时间可以有效利用。最近尝试使用番茄钟,每学习25分钟休息5分钟。25分钟是一个相对紧迫的时间,能给学习制造一种紧迫感,从而提高学习效率,一个个的番茄钟积累下来能极大的提高一天的学习效率,而不会因为单次学习时间太长,造成学习质量和心态的大幅.

2020-05-17 17:55:49 391 2

原创 1154 Vertex Coloring (25分)

分析:图的存储:结构体对每个询问,枚举所有边,判断每个边两个端点的颜色是否一样若每个边的两个端点的颜色都不一样,则求一共用了几种颜色求用了几种颜色用set通过代码:#include <iostream>#include <cstring>#include <unordered_set>using namespace std;const...

2020-05-02 18:22:30 100 2

原创 1146 Topological Order (25分)

思路:拓扑排序:在有向图中,若存在一条从顶点 A 到顶点 B 的路径,那么在序列中顶点 A 出现在顶点 B 的前面。对于每个询问序列,先存储每个节点在序列中的下标,建立一个下标数组再遍历每条边,判断起点下标是否比终点下标小(即判断起点是否在终点前面)只用枚举边而不用遍历图,故用最简便的结构体来存储每条边通过代码:#include <iostream>#include ...

2020-05-02 17:09:34 162 1

原创 1142 Maximal Clique (25分)

分析:判断是否是团 clique,即如果任意两个点之间都有边相连则是团,否则就不是团再判断是否是最大团maximal,即遍历所有不在集合中的剩余的点,看是否存在集合外的点满足和集合中所有的结点相连,如果存在一个这样的点就不是最大团Maximal clique题目中的数据范围较小,可以直接使用邻接表的方式存储图通过代码:#include <iostream>#includ...

2020-05-02 16:45:51 156

原创 1139 First Contact (30分)

思路:每一个人名映射到一个整数,用邻接矩阵存储图可能会有-0000的情况产生,故用字符串而不是int的方式读入补充知识:来源:C++STL中的unique函数解析unique函数通常和erase函数一起使用,来达到删除重复元素的目的。(注:此处的删除是真正的删除,即从容器中去除重复的元素,容器的长度也发生了变换;而单纯的使用unique函数的话,容器的长度并没有发生变化,只是元素的位...

2020-05-02 16:16:18 156 1

原创 1134 Vertex Cover (25分)

思路:把给定集合的每一个点标记,再判断每条边是否至少有一个点在给定的集合里面通过代码:#include <iostream>#include <cstring>using namespace std;const int N = 10010;int n, m;struct Edge{ int a, b;}e[N];bool st[N];...

2020-05-01 23:47:52 70

原创 1126 Eulerian Path (25分)

分析:每个点度数:每个点所连通的边数Eulerian:连通,所有点度数均为偶数Semi-Eulerian:连通,有两个点度数为奇数,其他点度数为偶数Non-Eulerian:不符合以上两种情况步骤:判断连通性:深搜或者宽搜遍历整个图,从某个点出发判断能否把图中的每一个点都遍历判断每个点的奇偶性通过代码:#include <cstring>#include &lt...

2020-05-01 21:30:03 117

原创 1122 Hamiltonian Cycle (25分)

分析:哈密顿回路:从起点出发,每个点走一遍,恰好回到起点哈密顿回路需要满足的条件:判断起点终点是否相同路径连通(过程中每两个点之间都有边)所有点都会访问一遍所有点数和为n+1通过代码:#include <iostream>#include <cstring>using namespace std;const int N = 210;int ...

2020-05-01 20:58:32 95

原创 1111 Online Map (30分)

#include <cstring>#include <iostream>#include <vector>using namespace std;const int N = 510;int n, m, S, T;int d1[N][N], d2[N][N];//d1存放length ,d2存放timeint dist1[N], dist2...

2020-05-01 10:25:22 119

原创 1087 All Roads Lead to Rome (30分)

#include <iostream>#include <cstring>#include <unordered_map>#include <vector>using namespace std;const int N = 210;int n, m;int w[N];int d[N][N];int dist[N], cnt[N...

2020-04-30 18:35:14 60

原创 1034 Head of a Gang (30分)

#include <cstring>#include <iostream>#include <vector>#include <algorithm>#include <unordered_map>using namespace std;int n, k;unordered_map<string, vector&lt...

2020-04-29 18:45:38 119

原创 1030 Travel Plan (30分)

思路:改进版Dijkstra算法#include <iostream>#include <cstring>#include <vector>using namespace std;const int N = 510;int n, m, S, T;int d[N][N], c[N][N];int dist[N], cost[N], pre[N...

2020-04-29 13:22:21 64

原创 1003 Emergency (25分) && Dijkstra算法

Dijkstra算法求单源最短路径:从一个点出发,到其他所有点的最短路径朴素版双重for循环时间复杂度:N^2堆优化时间复杂度:N^2logN#include <cstring>#include <iostream>using namespace std;const int N = 510;int n, m, S, T;int w[N], d[...

2020-04-29 13:13:23 114

原创 1094 The Largest Generation (25分)

思路:找出节点个数最多的一层层序遍历、DFS通过代码:不用queue用vector实现DFS#include <iostream>#include <cstring>#include <vector>using namespace std;const int N = 110;int n, m;bool g[N][N]; //邻接矩...

2020-04-27 21:42:12 73

原创 1053 Path of Equal Weight (30分) ♡

#include <iostream>#include <cstring>#include <vector>#include <algorithm>using namespace std;const int N = 110;int n, m, S;int w[N];bool g[N][N];vector<vector&l...

2020-04-27 21:11:27 73

原创 1061 Dating (20分)

思路:前两对字符串找两个相同的大写英文字母——字母本身的字典序——星期、钟头后面两对字符串找一个相同的英文字母——出现位置——分钟一对字符相同:字符、位置均相同前两个字符串中的第一对——要能正确代表星期(A-G)前两个字符串中的第二对——位于第一对后面,正确代表小时(0-9 A-N)输入格式:4 行中分别给出 4 个非空、不包含空格、且长度不超过 60 的字符串。输出格式:在...

2020-04-22 23:44:28 104

原创 1071 Speech Patterns (25分)

通过代码:#include <iostream>#include <unordered_map>using namespace std;bool check(char c){ if (c >= '0' && c <= '9') return true; if (c >= 'A' && c &lt...

2020-04-22 23:24:48 74

原创 1050 String Subtraction (20分)

#include <iostream>#include <unordered_set>using namespace std;string s1, s2;int main(){ getline(cin, s1); getline(cin, s2); unordered_set<char> hash; // 定义哈希表...

2020-04-22 23:08:21 81

原创 1036 Boys vs Girls (25分)

#include <iostream>using namespace std;int main(){ int n; string girl_name, girl_id; // 女生第一名的信息 int girl_score; string boy_name, boy_id; // 男生第一名的信息 int boy_score;...

2020-04-22 20:34:42 306

原创 1035 Password (20分)

通过代码:#include <iostream>using namespace std;const int N = 1010;string name[N], pwd[N];string change(string str){ string res; for (auto c : str) //范围遍历 if (c == '1') r...

2020-04-22 20:02:11 85

原创 【数据结构】数组和广义表

数组的顺序存储例:设有一-个二维数组A[m][n]按行优先顺序存储,假设A[0][0]存放位置在644(10),A[2][2]存放位置在676(10), 每个元素占一个空间,问A[3][3](10)存放在什么位置? (脚注10表示用10进制表示。)设数组元素A[i][j]存放在起始地址为Loc ( i, j)的存储单元中Loc(2,2)=Loc(0,0)+2n+2=644+**2n+2*...

2020-04-22 18:09:54 884

原创 【数据结构】树

树的基本术语结点:数据元素及指向子树的分支根节点:非空树中无前驱结点的节点结点的度:结点拥有子树的个数树的度:树内各节点度的最大值叶子节点:度为零分支节点:度不为0内部节点:根节点以外的分支节点森林:m(m>0)棵互不相交的树的集合。二叉树任何树都可以与二叉树相互转换,解决了树的存储结构及其运算存在的复杂性。【说明】二叉树不是树的特殊概念,他们是两个概念。二叉树结点的...

2020-04-22 18:06:02 163

原创 1006 Sign In and Sign Out (25分)

通过代码:#include <iostream>using namespace std;int main(){ string open_id, open_time; string close_id, close_time; int n; cin >> n; for(int i = 0; i < n; i++){ ...

2020-04-22 18:03:48 81

原创 【数据结构】串

最小操作集实现定位函数Index(S, T, pos)//pos为开始查找的位置int index(string s, string t, int pos){ if(pos > 0){ n = strlen(s); m = strlen(t); i = pos; while(i <= n - m +1){ //n >= i+m-1; substr(sub, ...

2020-03-29 13:34:05 474

原创 【队列】银行业务队列简单模拟 (25分)

设某银行有A、B两个业务窗口,且处理业务的速度不一样,其中A窗口处理速度是B窗口的2倍 —— 即当A窗口每处理完2个顾客时,B窗口处理完1个顾客。给定到达银行的顾客序列,请按业务完成的顺序输出顾客序列。假定不考虑顾客先后到达的时间间隔,并且当不同窗口同时处理完2个顾客时,A窗口顾客优先输出。输入格式:输入为一行正整数,其中第1个数字N(≤1000)为顾客总数,后面跟着N位顾客的编号。编号为奇数...

2020-03-27 12:04:23 1162 1

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除