C/C++
文章平均质量分 62
c/c++
来杯Sherry
这个作者很懒,什么都没留下…
展开
-
算法练习——力扣随笔【LeetCode】【C++】
在哪定义结构体?有两个位置可写:1)类里面,讲究的话写在private中,这里就不讲究了。} };2)顶部区域int data;} };在哪定义全局变量?1)顶部区域public :return v;} };2)换个方式,传参方式改为引用很多全局变量是可以被替代的,比如希望值被修改并返回到原来作用域,但返回值位置紧张。暴力时,全局变量开大数组还是有点用处的。在哪定义头文件?一般是全面的,多虑了。原创 2023-07-21 21:35:33 · 327 阅读 · 1 评论 -
2023复试——机试随笔【c++】【考研】
新生的小白鼠也如此繁殖。问在第N个月时,活的小白鼠有多少对?对于每组测试数据,你的程序需要向标准输出设备(通常为启动该程序的文本终端)输出一行,其中只有一个整数,即第N个月时活的小白鼠有几对,所有数据前后没有多余的空行,两组数据之间也没有多余的空行。建议用嘴说说,,写代码时间一长脑子一涨,很容易码错,找了半天错误,和正确结果就差一天,不就是2月的问题吗,不就是闰年判断有问题吗?思路二:规律,用9补位,比较大小,利用补位结果排序(结构体排序,便保存了原结果且有序了),若相同比较多出来的位置是真9的优先。原创 2023-07-18 09:42:06 · 1485 阅读 · 0 评论 -
链表问题——两两交换链表中的关于swap(p,q)的无效性讨论【相邻节点】
到底是p、q节点的内容变了,位置不变【p、q指向发生了变化】,还是内容不变,p、q位置变了【p、q节点位置发生了变化】,自嘲自己一下,交换指针我还是自己手写交换节点位置吧,交换后p、q的指向再换一下,这个思路还是熟悉的。本想着用swap(p,q)直接偷懒,最后更新下p、q前一个结点的指向关系就ok,结果输出和输入一毛一样,原本还在纠结,链表题目的特殊操作,考虑的特例 空表、1、2,为什么要考虑2个节点呢?给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。p、q 交换后到底交换了什么?原创 2023-07-16 23:45:00 · 231 阅读 · 0 评论 -
链表问题——长整数加法运算题解【双向链表】
假设2个任意长度的整数x、y分别用链表A和B存储,现要求设计一个算法,实现x+y。计算结果存储在链表C中。链表A、B、C可以是单向链表或双向链表,但由于A和B输出时需要从头至尾遍历,而做加法时需要从尾至头遍历,因此推荐使用双向链表存储。链表的每个结点的数据域可以选择以下三种设计方式:(1)链表的每个结点存储长整数的一位(不推荐);(2)链表的每个结点从长整数的低位开始拆分(4位为一组,存到一个结点中,即结点的数据域为不超过9999的非负整数),依次存放在链表的每个结点;原创 2023-07-08 00:00:00 · 789 阅读 · 0 评论 -
迟来的函数传参补充——传引用【引用调用】【c++】
比如实现一个交换两个变量的值,过去确实只会值传递,像是涉及到改变值的操作,都会下意识的去写在main函数中,将结果在传给下一个需要相关值的函数。,前者生成一个源结构的副本,后者链表或者树的时候用的比较多,本文补充到一个类似值传递的函数调用方式,函数定义的传参位置却是地址接收方式,这就是。其实早就在王道见过,只是没注意其中的奥妙,怪就怪我线性表题目爱用数组解决,栈和队列喜欢用结构体内置函数的方式实现,完全用不到引用。稍微讲究一点的用法,往往是定义一个输出函数的传入参数设为常引用,意味着无更改要求。原创 2023-06-16 16:42:24 · 803 阅读 · 0 评论 -
多重背包问题【多重背包】【最基础的板子】【动态规划】
关键输入考虑好物品下标对应,为了后面打表明白mΣki时间复杂度->mΣlog(ki) 也就是二进制分解####板子#include<iostream>using namespace std;const int MAXN =1100;int w[MAXN];int v[MAXN];int main(){ int n,m; cin>>n>>m; int number =1;//为了打表时候第一个物品下标是原创 2022-03-29 19:53:50 · 703 阅读 · 0 评论 -
合唱队形【动态规划】【最长递增子序列】
描述N位同学站成一排,音乐老师要请其中的(N-K)位同学出列,使得剩下的K位同学不交换位置就能排成合唱队形。 合唱队形是指这样的一种队形:设K位同学从左到右依次编号为1, 2, …, K,他们的身高分别为T1, T2, …, TK, 则他们的身高满足T1 < T2 < … < Ti , Ti > Ti+1 > … > TK (1 <= i <= K)。 你的任务是,已知所有N位同学的身高,计算最少需要几位同学出列,可以使得剩下的同学排成合唱队形。输入描述:原创 2022-03-25 21:39:30 · 405 阅读 · 0 评论 -
找出直系亲属【并查集、vector路径存储】
这个题 找父亲发现不唯一,但是找儿子确是唯一的,那么可以倒过来建树描述如果A,B是C的父母亲,则A,B是C的parent,C是A,B的child,如果A,B是C(外)祖父,祖母,则A,B是C的grandparent,C是A,B的grandchild,如果A,B是C的(外)曾祖父,曾祖母,则A,B是C的great-grandparent,C是A,B的great-grandchild,之后再多一辈,则在关系上加一个great-。输入描述:输入包含多组测试用例,每组用例首先包含2个整数n(0<=.原创 2022-03-17 09:42:09 · 1724 阅读 · 0 评论 -
连通图【并查集】
并查集Initial() //初始化Union() //合并,路径压缩Find() //查询 ,找爹用途:判断连通图、求连通分量#include<iostream>using namespace std;int n,m;int father[1010];int height[1010];void Initial(){ for(int i=1;i<=n;i++){ father[i]=i;//自己是自己的父亲 height[原创 2022-03-17 09:29:18 · 512 阅读 · 0 评论 -
青蛙过河【递归】
Description1)一条小溪尺寸不大,青蛙可以从左岸跳到右岸,在左岸有一石柱L,石柱L面积只容得下一只青蛙落脚,同样右岸也有一石柱R,石柱R面积也只容得下一只青蛙落脚。 2)有一队青蛙从小到大编号:1,2,…,n。 3)初始时:青蛙只能趴在左岸的石头 L 上,按编号一个落一个,小的落在大的上面-----不允许大的在小的上面。 4)在小溪中有S个石柱、有y片荷叶。 5)规定:溪中的每个石柱上如果有多只青蛙也是大在下、小在上,每个荷叶只允许一只青蛙落脚。 6)对于右岸的石柱R,与左岸的石柱L一样允许多个原创 2022-03-07 20:43:39 · 536 阅读 · 0 评论 -
试题 基础练习 闰年判断【水题】
试题 基础练习 闰年判断资源限制时间限制:1.0s 内存限制:256.0MB问题描述给定一个年份,判断这一年是不是闰年。当以下情况之一满足时,这一年是闰年:年份是4的倍数而不是100的倍数;年份是400的倍数。其他的年份都不是闰年。输入格式输入包含一个整数y,表示当前的年份。输出格式输出一行,如果给定的年份是闰年,则输出yes,否则输出no。说明:当试题指定你输出一个字符串作为结果(比如本题的yes或者no,你需要严格按照试题中给定的大小写,写错大小写将不得分。样例原创 2022-01-23 20:05:43 · 499 阅读 · 0 评论 -
离散数学中Warshall算法简析【离散数学】
算法的自己的语言描述:依次遍历邻接矩阵中的所有元素(M[i,j]),比如按照先列后行进行,如果M[i,j] != 0,那么就把j行加到第i行上。以下是例子:#include<stdio.h>int main(){ int a[999][999]; int i,t,j,k,n; int m=1; scanf("%d", &n); ...原创 2019-06-12 11:41:46 · 8452 阅读 · 1 评论 -
B - 组合数的计算【C++】
Description给定n组整数(a,b),计算组合数C(a,b)的值。如C(3,1)=3,C(4,2)=6。Input第一行为一个整数n,表示有多少组测试数据。(n <= 100000)第2-n+1行,每行两个整数分别代表a,b;中间用空格隔开。(a,b <= 40)Output对于每组输入,输出其组合数的值。每个输出占一行。SampleInput43 14 25 01 1Output3611Tip:long long 直接开15次左右阶乘就会爆,原创 2021-01-02 21:15:45 · 367 阅读 · 0 评论 -
最少硬币问题------dp思想
最少硬币问题Description设有n种不同面值的硬币,各硬币的面值存于数组T[1:n]中。现要用这些面值的硬币来找钱。可以使用的各种面值的硬币个数存于数组Coins[1:n]中。对任意钱数0≤m≤20001,设计一个用最少硬币找钱m的方法。对于给定的1≤n≤10,硬币面值数组T和可以使用的各种面值的硬币个数数组Coins,以及钱数m,0≤m≤20001,计算找钱m的最少硬币数。Input输入数据第一行中只有1个整数给出n的值,第2行起每行2个数,分别是T[j]和Coins[j]。最后1行是要原创 2020-12-07 17:57:25 · 553 阅读 · 0 评论 -
骨牌铺方格------贪心思想
骨牌铺方格Description在2×n的一个长方形方格中,用一个1× 2的骨牌铺满方格,输入n ,输出铺放方案的总数. 例如n=3时,为2× 3方格,骨牌的铺放方案有三种,如下图:Input输入包含一个整数n,表示该测试实例的长方形方格的规格是2×n (0< n<=50)。Output输出铺放方案的总数。SampleInput3Output3Hint#include<bits/stdc++.h>using namespace std;long lon原创 2020-12-07 15:31:42 · 370 阅读 · 0 评论 -
顺序表应用7:最大子段和之分治递归法------分治思想
顺序表应用7:最大子段和之分治递归法Description给定n(1<=n<=50000)个整数(可能为负数)组成的序列a[1],a[2],a[3],…,a[n],求该序列如a[i]+a[i+1]+…+a[j]的子段和的最大值。当所给的整数均为负数时定义子段和为0,依此定义,所求的最优值为: Max{0,a[i]+a[i+1]+…+a[j]},1<=i<=j<=n。 例如,当(a[1],a[2],a[3],a[4],a[5],a[6])=(-2,11,-4,13,-5,-2原创 2020-12-07 15:08:51 · 221 阅读 · 0 评论 -
工作分配问题------基于dfs的回溯思想
工作分配问题Description设有n件工作分配给n个人。将工作i分配给第j个人所需的费用为 cij。试设计一个算法,为每一个人都分配1 件不同的工作,并使总费用达到最小。设计一个算法,对于给定的工作费用,计算最佳工作分配方案,使总费用达到最小。Input输入数据的第一行有1 个正整数n (1≤n≤20)。接下来的n行,每行n个数,表示工作费用。Output将计算出的最小总费用输出。SampleInput310 2 32 3 43 4 5Output9#include<原创 2020-12-07 10:17:53 · 232 阅读 · 0 评论 -
子集和问题------基于dfs的回溯思想
子集和问题Description子集和问题的一个实例为〈S,t〉。其中,S={ x1 , x2 ,…,xn }是一个正整数的集合,c是一个正整数。子集和问题判定是否存在S的一个子集S1,使得:。试设计一个解子集和问题的回溯法。对于给定的正整数的集合S={ x1 , x2 ,…,xn }和正整数c,计算S 的一个子集S1,使得:。Input输入数据的第1 行有2 个正整数n 和c(n≤10000,c≤10000000),n 表示S 的大小,c是子集和的目标值。接下来的1 行中,有n个正整数原创 2020-12-06 21:13:34 · 387 阅读 · 0 评论 -
最优合并问题------贪心思想
最优合并问题Description给定k 个排好序的序列s1 , s2,……, sk , 用2 路合并算法将这k 个序列合并成一个序列。假设所采用的2 路合并算法合并2 个长度分别为m和n的序列需要m + n -1次比较。试设计一个算法确定合并这个序列的最优合并顺序,使所需的总比较次数最少。为了进行比较,还需要确定合并这个序列的最差合并顺序,使所需的总比较次数最多。对于给定的k个待合并序列,计算最多比较次数和最少比较次数合并方案。Input输入数据的第一行有1 个正整数k(k≤1000),表示有原创 2020-12-06 17:57:46 · 933 阅读 · 0 评论 -
汽车加油问题------贪心思想
汽车加油问题Description一辆汽车加满油后可行驶n公里。旅途中有若干个加油站。设计一个有效算法,指出应在哪些加油站停靠加油,使沿途加油次数最少。并证明算法能产生一个最优解。对于给定的n和k个加油站位置,计算最少加油次数。Input输入数据的第一行有2 个正整数n和k(n≤5000,k≤1000),表示汽车加满油后可行驶n公里,且旅途中有k个加油站。接下来的1 行中,有k+1 个整数,表示第k个加油站与第k-1 个加油站之间的距离。第0 个加油站表示出发地,汽车已加满油。第k+1 个加油站表原创 2020-12-06 16:00:07 · 333 阅读 · 0 评论 -
简单的代码生成程序【编译原理机测】
简单的代码生成程序Description通过三地址代码序列生成计算机的目标代码,在生成算法中,对寄存器的使用顺序为:寄存器中存有 > 空寄存器 > 内存中存有 > 以后不再使用 > 最远距离使用Input单组输入,给定输出的三地址代码的个数和寄存器的个数.所有的变量为大写字母,寄存器的数量不超过9Output参照示例格式输出,不需要将最后的寄存器中的值写回内存不再使用变量不用写回内存SampleInput4 2T:=A-BU:=A-CV:=T+UW:=V+原创 2020-12-05 17:21:36 · 393 阅读 · 0 评论 -
B - 多元Huffman编码问题------贪心思想
B - 多元Huffman编码问题Description在一个操场的四周摆放着n堆石子。现要将石子有次序地合并成一堆。规定每次至少选2 堆最多选k堆石子合并成新的一堆,合并的费用为新的一堆的石子数。试设计一个算法,计算出将n堆石子合并成一堆的最大总费用和最小总费用。对于给定n堆石子,计算合并成一堆的最大总费用和最小总费用。Input输入数据的第1 行有2 个正整数n和k(n≤100000,k≤10000),表示有n堆石子,每次至少选2 堆最多选k堆石子合并。第2 行有n个数(每个数均不超过 100原创 2020-11-27 11:47:31 · 991 阅读 · 0 评论 -
D - 整数变换问题------基于dfs的回溯思想
#include <iostream>using namespace std;int Max;int n,m;char fn[101];//这里不能用vector queue代替,a[step]会被重写,前面两个容器不适合int search(int step,int x){ if(step > Max) return 0; if(x*3 == m||search(step+1, x*3)) { fn[step]='f';原创 2020-11-26 21:05:15 · 293 阅读 · 0 评论 -
B - 运动员最佳匹配问题------基于dfs的回溯思想
B - 运动员最佳匹配问题Description羽毛球队有男女运动员各n 人。给定2 个n×n 矩阵P 和Q。P[i][j]是男运动员i 和女运动员j配对组成混合双打的男运动员竞赛优势;Q[i][j]是女运动员i和男运动员j配合的女运动员竞赛优势。由于技术配合和心理状态等各种因素影响,P[i][j]不一定等于Q[j][i]。男运动员i和女运动员j配对组成混合双打的男女双方竞赛优势为P[i][j]*Q[j][i]。设计一个算法,计算男女运动员最佳配对法,使各组男女双方竞赛优势的总和达到最大。设计一个算原创 2020-11-26 16:38:38 · 521 阅读 · 0 评论 -
0-1背包之A - 高数Umaru系列(9)——哈士奇
A - 高数Umaru系列(9)——哈士奇Description由于高数巨养的喵星人太傲娇了,要天天吃新鲜猫粮而且还经常欺负高数巨,所以高数巨决定买几条哈士奇尝尝鲜。这天高数巨来到了二手狗市场买哈士奇,高数巨看完了所有的哈士奇,记下了每条哈士奇的价格,并根据对它们的好感程度给它们每只都赋予了一个萌值。高数现在手里有X元,她想通过购买若干条哈士奇来获得尽可能多的萌值。现在给定高数巨手里的钱X以及N条哈士奇的价格和萌值,求高数巨最多可获得多少萌值Input多组输入。对于每组输入,第一行有两个整数N,X原创 2020-10-03 16:11:43 · 443 阅读 · 0 评论 -
贪心、递推、递归、分治和动态规划的区别
动态规划和分治法的区别动态规划也是一种分治思想(比如其状态转移方程就是一种分治),但与分治算法不同的是,分治算法是把原问题分解为若干个子问题,自顶向下求解子问题,合并子问题的解,从而得到原问题的解;动态规划也是把原始问题分解为若干个子问题,然后自底向上,先求解最小的子问题,把结果存在表格中,在求解大的子问题时,直接从表格中查询小的子问题的解,避免重复计算,从而提高算法效率。递归是一个过程或函数在其定义或说明中有直接或间接调用自身的一种方法,它通常把一个大型复杂的问题层层转化为一个与原问题相似的规模较小翻译 2020-10-03 11:00:35 · 435 阅读 · 0 评论 -
B - 识别浮点常量问题------编译原理机测
B - 识别浮点常量问题Description编译器在对程序进行编译之前,首先要进行语法分析。通常,程序被分解成若干个小单元,然后和语言的语法模式进行匹配。在分析表达式的时候,变量的类型在变量声明的时候就决定了;而常量的类型需要从常量的形式来判断。假设你是自动编译器(ACM)开发小组的一员,负责Pascal语言编译器的开发。你的任务是分析程序分解模块送来的文件,判断其中包含的字符串是否合乎语法的Pascal浮点常量。Pascal语言对浮点常量的语法要求是:一个浮点常量除了十进制数码之外,必须带有一个原创 2020-09-21 20:20:09 · 315 阅读 · 0 评论 -
对C语言中少见情况的补充
printf("%%d,30);结果:%dprintf("%d,30);结果:30a=(x,y,z);概括号的值为最后代数式即z的值;if(x=a+b),,概括号的值为等式右侧的值;欢迎使用Markdown编辑器你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章,了解一下Markdown的基本语法知识。...原创 2019-06-08 20:34:58 · 748 阅读 · 0 评论 -
初见顺序表、栈和队列
//顺序表#define maxsize 100typedef struct node{ int data[maxsize]; int last;//每输入一个数就++;它记录了i可访问的最大序号}list;//建立空表list* MakeEmpty(){ list *p; p=(list*)malloc(sizeof(list)); p-&g...原创 2019-09-24 11:31:03 · 389 阅读 · 0 评论 -
用结构体模拟STL容器实现顺序表、栈和队列【线性表】
//顺序表#define maxsize 100typedef struct node{ int data[maxsize]; int last;//每输入一个数就++;它记录了i可访问的最大序号}list;//建立空表list* MakeEmpty(){ list *p; p=(list*)malloc(sizeof(list)); p-&g...原创 2020-12-20 13:12:13 · 123 阅读 · 0 评论 -
大学C++课程提炼概括【C++笔记】
C++(抽象、封装(安全性)、继承、多态)封装:各个对象独立,且对象隐私部分,对外隐蔽如果未写明限制幅(public: private: protected: )则默认为私有声明函数可以只声明参数类型,定义函数,形参类型、形参名称全写 函数重载,同名函数(根据形参不同,来调用,)max(int a) max(float a)//define 替换问题 #define s(i) i*i//那么,s(a+b)= a+b*a+b,#define s(i) (i)*(i)//.原创 2020-07-21 11:43:15 · 418 阅读 · 0 评论