- 博客(54)
- 收藏
- 关注
原创 DP动态规划零钱兑换,原题地址 https://leetcode.cn/problems/coin-change-ii/description/
这里我举例就是1分 2分 5分 的硬币三种 ,组成1角(就是10分) ,问有多少种组法。如果不选任何硬币,金额就是 0 分。这是一种“合法”的方式(相当于什么都不做)。请你计算并返回可以凑成总金额的硬币组合数。如果任何硬币组合都无法凑出总金额,返回。表示“用 0 个硬币凑 0 分”有1种方式。表示不同面额的硬币,另给一个整数。如果不用新硬币:方法数保持原来的。假设每一种面额的硬币有无限个。每次用一个新的硬币面额时,可以。如果用新硬币:剩下的金额就是。只能用 1 个 1分硬币。
2025-03-27 17:18:54
261
原创 0-1背包问题
1.放入背包:dp[i][j] = max(dp[i - 1][j], V[i - 1] + dp[i - 1][j - W[i - 1]]);综合这两种选择,状态转移方程为:dp[i][j]=max(dp[i−1][j],V[i−1]+dp[i−1][j−W[i−1]])// 1. 定义 dp[i][j] 表示前 i 个商品,放入容量为 j 的背包的最大价值。2.不放入背包:dp[i][j] = dp[i-1][j];
2024-12-04 14:40:08
523
原创 洛谷月赛P4924 [1007] 魔法少女小Scarlet
经过旋转变成X后Y后:(x-1,y-1),(x-1,y),(x-1,y+1)经过逆时针旋转变成X后Y后:(x+1,y+1),(x+1,y),(x+1,y-1)如果以逆时针旋转 ,最左边一列原来是X原Y原:: (x-1,y+1),(x,y+1),(x+1,y+1)如果以顺时针旋转,最左边一列原来是 X原Y原: (x-1,y+1),(x,y+1),(x+1,y+1)得 Y后=y-x+X原;得X后 =x-y+Y原。可以推出公式:X后+Y原=x+y;可以推出公式:X原+Y后=x+y;得Y后=x+y-X原。
2024-11-24 17:20:03
886
原创 P2670 [NOIP2015 普及组] 扫雷游戏
扫雷游戏是一款十分经典的单机小游戏。在 nn 行 mm 列的雷区中有一些格子含有地雷(称之为地雷格),其他格子不含地雷(称之为非地雷格)。玩家翻开一个非地雷格时,该格将会出现一个数字——提示周围格子中有多少个是地雷格。游戏的目标是在不翻出任何地雷格的条件下,找出所有的非地雷格。现在给出 nn 行 mm 列的雷区中的地雷分布,要求计算出每个非地雷格周围的地雷格数。注:一个格子的周围格子包括其上、下、左、右、左上、右上、左下、右下八个方向上与之直接相邻的格子。
2024-11-19 12:32:31
448
原创 洛谷P1042[NOIP2003 普及组] 乒乓球
在 11 分制下,此时比赛的结果是华华第一局 11 比 0 获胜,第二局 11 比 0 获胜,正在进行第三局,当前比分 1 比 1。而在 21 分制下,此时比赛结果是华华第一局 21 比 0 获胜,正在进行第二局,比分 2 比 1。if ((a >= n || b >= n) && abs(a - b) >= 2)这句可以看成时比赛时间没结束 就达到结束条件,而 cout << a << ":" << b << endl;分制下,规则如“领先 2 分”是为了确保比赛的公平性和竞争特性,例如,如果比分是。
2024-11-19 11:27:50
373
原创 洛谷P1044 [NOIP2003 普及组] 栈
所以只有出元素 dp[0][j] =dp[1][j-1];//,那么无论栈中有多少个元素,只有一种方式,即直接将剩下的元素全部输出。两种做法加起来 :则 dp[i][j]= dp[i-1][j]+ dp[i+1][j-1];//,那么无论栈中有多少个元素,只有一种方式,即直接将剩下的元素全部输出。我们把dp[i][j] 看作 栈里有i个元素,队列里有j个元素时 输出序列情况。//dp[i][j];做法2:栈里面进来一个 dp[i+1][j-1];做法1:栈里面出去一个 dp[i-1][j];
2024-11-15 20:13:46
946
原创 约瑟夫环问题
n 个人围成一圈,从第一个人开始报数,数到 m 的人出列,再由下一个人重新从 1开始报数,数到 m 的人再出圈,依次类推,直到所有的人都出圈,请输出依次出圈人的编号。//数组 arr,最大长度为 1000(大于7就行),用于表示每个人的状态(存活或已被选中)从1 开始数 数到m的人出列,数字2 则出列,继续数,数字4出列,依次是6 、1 、5 、 3 、7。// step 用来计数,每经过一个人,step 增加 1。// 输出被选中的人的编号。// i 用来表示当前的人的下标,从 1 开始。
2024-11-15 17:54:47
367
原创 c++STL初识
C++的和思想,目的就是大多情况下,数据结构和算法都未能有一套标准,导致被迫从事大量重复工作为了建立数据结构和算法的一套标准,诞生了。
2024-10-20 14:20:10
527
原创 c++string容器
本质:string是c++风格的字符串,而string本质上是一个类string和char*区别:char* 是一个指针。string是一个类,内部封装了char*,管理这个字符串,是一个char*型的容器。内存管理stringchar*string 特点:string 类内部封装了很多成员方法append()insert()erase()replace()find()substr()clear()
2024-10-19 15:17:57
499
原创 指定位置插串
题目:存在两个字符串,实现在字符串s1中的指定位置n处(从0开始计数)插入字符串s2。若n大于s1的长度,则从s1末尾处接上s2字符串。输出:Wendy hate c++输入:Wendy c++
2024-05-27 22:17:03
122
原创 青铜题:输出3.1415926、12345678.123456789的小数、指数形式。
如何使用科学计数法:在printf();里用%e的一个格式控制符。另一种是cout <<scientific << num;意思是输出变量num的指数形式。但这两种方法输出后面只有两位的整数,而这个例子有三位。e+000 相当于乘以10的0次方。e+007相当于乘以10的7次方。
2024-04-27 11:36:21
474
原创 如何读取一个整行的字符串
cin.getline()是一个C++函数,与gets区别是在输入的时候,会有一个长度的参数,防止数组越界可不会发生缓冲区溢出,通常与std::string一起使用。gets(),C语言函数,接受的参数是字符数组,gets()在输入字符串时,不进行数组下标的检查。getline()也是C++里的函数,接受的一个参数是输入流,另一个是string类型的字符串。gets、cin.getline读取的都是char * 类型的字符串。getline读取的是string类型的字符串。
2024-04-27 10:10:08
1128
原创 C语言oj题
define num(k,n) round((k)*pow(10,n)) / pow(10,n) //round()和pow()为math.h库里的。pow() 函数用来求 x 的 y 次幂(次方)将一个浮点型K数保留n(1≤n≤5)位小数(四舍五入)的算法定义为宏。用来接受一个整数参数,表示将在运行时获取的参数值作为精度(指定小数部分的位数)//宏定义:将浮点数保留指定的小数位数,使用四舍五入。输入格式:输入k为实型,n为整数,空格分隔。pow(2,10);输出格式:输出为实型。
2024-04-24 21:06:15
359
原创 Linux的目录结构
lib:通常存放系统的共享库文件,这些文件包含了许多程序所需的函数、模块等。能包含了像C标准库(libc)、数学库(libm)、动态链接器(ld-linux.so)、线程库(libpthread)、加密库(libcrypto)、网络库(libnet)、图形库(libX11)等常见的共享库文件。/usr:包含了系统软件和数据的目录,比如用户安装的软件、共享的文档等,类似于 Windows 系统中的 Program Files 目录。/etc:存放系统的配置文件,包括网络配置、软件包管理的配置等。
2024-03-31 10:44:36
321
原创 C语言数据结构判断字符串是否是回文
i++)//如果是奇数,就是mid。判断字符串是否是回文通过把一半的字符串输入栈,再通过出栈一一与另一半对比,如果相等就继续,直到最后发现都能一一对应,则说明是回文。//因为索引从0开始。
2024-03-08 16:32:59
1036
原创 C语言数据结构用栈实现将十进制del转换为r进制
/如果初始化为-1,push函数中就先++,再赋值,如果初始化为0,就就先赋值,再++//把余的结果存入栈中,例如十进制1348,八进制为2504。///分别是十进制数和要转=转换的位(例如八进制位)//第一次余得4,先入栈,就后出栈。int isempty(Stack* s)//判断是否空栈。printf("转换的等效%d进制数:>",r);int isfull(Stack* s)//判断是否栈满。printf("请输入十进制数:>\n");
2024-03-08 15:43:52
597
原创 C语言数据结构单链表的翻转
其中 prev 初始化为 NULL,意味着新链表中还没有元素(即 prev 是头结点),curr 则初始化为 L 的下一个节点,即链表的第一个真正的数据结点(在 L 中并不包含数据,只是作为头结点存在)。循环结束后,我们将链表的头结点的 next 指针指向逆置后的链表的头结点,即 prev,完成逆置操作。最后,我们将原链表的头结点 L 的 next 指针重新连接到逆置后的链表的头结点 prev,即完成了整个链表的逆置操作,并重新连接了原链表头节点和逆置后的链表。//新链表头结点,当前还没有结点。
2024-03-05 12:05:31
509
原创 C语言(数据结构)顺序表的基本操作(增删改查)
printf("请输入要插入的元素:(输入-1就停止插入)>\n");printf("请输入要插入的元素:>(输入-1就停止插入)\n");printf("当前元素个数:%d\n",size(&list));printf("请输入要插入的下标和数据:>\n");printf("请输入要删除元素的下标:>\n");printf("请输入要删除的元素:>\n");printf("请输入要查找的元素:>\n");
2024-03-03 13:55:28
1911
原创 C语言数据结构
编写一个程序,要求用户输入整数的个数,然后在动态数组中存储这些整数。然后,程序应该将这个动态数组的长度扩展为原来的两倍,并从用户那里读取更多的整数存储到数组中。最后,打印出扩展后的动态数组中的所有整数,并释放内存。提示:输入整数的个数应该大于等于0。
2024-02-25 13:37:55
363
原创 C语言文件操作
/磁盘上的文件都是文件,有时我们会把信息输出到磁盘上,当需要的时候再从磁盘上把数据读取到内存中使用,这里处理的就是磁盘上的文件。数据文件--文件的内容不一定是程序,而是程序运行时读写的数据,比如程序运行需要从中读取数据的文件,或者输出内容的文件。在编写程序的时候,在打开文件的同时,都会返回一个FILE*的指针变量指向该文件,也相当于建立了指针和文件的关系,//打印结果是111转化的1 1 1的字符串,后面两个也是。//..表示上一级路径,fopen("../../test.txt","r")
2024-02-24 17:21:31
1515
原创 C语言动态内存分配函数malloc calloc realloc
/calloc函数,为num个大小为size的元素开辟一块空间,并且把空间的每个字节初始化为全0,空间不够用会返回NJULL指针。//malloc函数,这个函数向内存申请一块连续可用的空间,并返回指向这块空间的指针,开辟失败的话会返回一个NULL指针。//p起始地址,+i找到下一个,然后解引用。//开辟一块满足需求的空间并且把原来内存中的数据拷贝回来,释放旧的内存空间,最后返回新开辟的内存空间地址。//realloc注意事项:1.如果p指向空间的空间有足够的内存空间可以追加,后返回p(p指向的地址)
2024-02-22 19:35:59
395
原创 C语言数组指针
/pa是指针变量的名字,右边的*说明pa是指针,[5]说明pa指向的数组是5个元素,char*说明pa指向的数组元素类型是char*;int* p[10];//p是一个数组,指向的类型int*,指针数组。
2024-02-22 12:46:19
339
原创 C语言指针详解
/所以,即使你传递的是数组的首地址,但printf("%s\n",arr);//在C语言中,当你用%s格式控制符来打印一个字符数组时,它会从数组的第 一个字符开始,一直打印直到遇到字符串的结尾标志\0为止。//两者打印结果都是abcdef,由于在C语言中,字符数组可以被当作以'\0'结尾的字 符串来处理,//arr数组名为首元素地址,即a的地址,字符指针存放数组名,即首元素地址。
2024-02-21 20:17:50
328
原创 计算一个非负整数的每位组成之和(递归实现) 如4399 4+3+9+9=25
/计算一个非负整数的每位组成之和(递归实现)digitsum(4399) 4+3+9+9=25。函数中,如果输入的数字大于 9,说明还有两位及以上,递归调用。递归函数最终会将各位数字之和累加起来并返回。分别计算高位和低位的各位数字之和。
2024-02-21 17:04:46
370
原创 C语言实现字符串逆序
/逆序bcde(条件是字符个数大于2,当只剩一个就不用),然后把a放到'\0'的位置。//1.a取出来放到临时变量里,f移动到a的位置,在f位置放一个’\0‘,然后。//a和f交换.逆序bcde,reverse("bcde")//字符串逆序(递归实现)
2024-02-21 16:47:02
435
原创 C语言编程 题目:交换二进制的奇数位和偶数位,内容:获取一个整数二进制序列中所有的偶数位和奇数位。分别打印二进制序列
【代码】C语言编程 题目:交换二进制的奇数位和偶数位,内容:获取一个整数二进制序列中所有的偶数位和奇数位。分别打印二进制序列。
2024-02-21 16:16:44
398
原创 c语言写一个函数求某个数字二进制(补码)中有多少个1
如果有负数,当成无符号位处理,如-1,原来是//1000000000000000000001,反码1111111111111111111111111110,补码为1111111111111111111111111111。if(((n>>i)&1)==1)//每个二进制位与1按位与,有0就为0;int func(unsigned int n)//如果有负数,当成无符号位处理。
2024-02-21 15:25:21
411
原创 C语言指针
避免野指针:指针初始化,防止指针越界,使用指针及时释放空间置NULL,指针使用前检查有效性。在C语言中,指针类型决定了指针进行解引用操作的时候,能够访问空间的大小。//如果是char* 就不行。//可以把数组中的0全变为1。//内存中显示 44 33 22 11。当我是一个double *p 的时候,*p能够访问8个字节。当我是 char*p的时候,*p能够访问1个字节。//p+1--->走八个字节。当我是int *p的时候,*p能够访问4个字节。//p+1--->4个字节。
2024-02-21 13:47:24
320
原创 C语言中数组名是首元素地址有两个例外
/2.&aar,&数组名,表示取出的时=是整个数组的地址;//1.sizoef(数组名)--数组名表示整个数组大小。
2024-02-20 21:13:53
435
原创 C语言冒泡排序
1.从待排序的列表中,从第一个元素开始,依次比较相邻的两个元素。如果顺序不正确,交换它们的位置,将较大(或较小)的元素移动到右侧。冒泡排序是一种简单的排序算法,它的基本思想是通过相邻元素的比较和交换来进行排序。3.对除了最右侧已排序好的元素外的剩余元素,重复上述步骤,直到整个列表排序完成。2.经过第一轮比较后,列表中最大(或最小)的元素被移动到了最右侧。冒泡排序的时间复杂度为O(n^2),其中n是待排序列表的大小。
2024-02-20 20:56:49
323
原创 C语言汉诺塔
3.最后将在第一步移动到辅助柱子(B)上的 n-1 个盘子,通过起始柱子(A)移动到目标柱子(C)上。1.将前 n-1 个盘子从起始柱子(A)通过目标柱子(C)移动到辅助柱子(B);2.将剩下的最后一个盘子从起始柱子(A)直接移动到目标柱子(C);int n = 3;// 汉诺塔的盘子数量。//from_rod ,A起始柱子。//from_to C 目标柱子。//from_aux B辅助柱子。三个盘子从上到下为123。
2024-02-20 19:21:04
461
原创 C语言之求斐波那契数列
1 1 2 3 5 8 13 21 34 ....前两个数之和等于第三个数---斐波那契数列。//开始a=1,b=1,c=a+b,循环一次ab依次向后移动。思想:Fib(n),当n2,Fib(n-1)+Fib(n-2)开始a=1,b=1,a+b赋值给c,然后移动,a=1,b=2,a+b赋值给c。printf("第%d个斐波那契数是:%d\n",n,ret);printf("第%d个斐波那契数是:%d\n",n,ret);//当n=1或2时不会进入循环直接得出结果。
2024-02-20 18:39:03
642
原创 C语言之递归
'\0')// *arr 解引用,这里可以看成数组中第一个元素。//数组传参,传的是首元素地址。int strlengh(char arr[])//或者char *arr。//C语言之递归求字符串长度,不能有临时变量。C语言之递归输出5 4 3 2 1。
2024-02-20 17:08:15
370
原创 C语言goto语句的应用--关机程序
printf("你的电脑将在30秒后关机,如果输入:我是笨蛋,就取消关机!,请输入:\n");printf("回答错误!if(0==strcmp(arr,"我是笨蛋"))
2024-02-20 12:42:13
406
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人