c语言
HOVL_C++
这个作者很懒,什么都没留下…
展开
-
蒙特卡罗算法
基本思想:当所求解问题是某种随机事件出现的概率,或者是某个随机变量的期望值时,通过某种“实验”的方法,以这种事件出现的频率估计这一随机事件的概率,或者得到这个随机变量的某些数字特征,并将其作为问题的解。蒙特卡罗方法解题过程的三个主要步骤:(1)构造或描述概率过程对于本身就具有随机性质的问题,如粒子输运问题,主要是正确描述和模拟这个概率过 程,对于本来不是随机性质的确定性问题,比如计算定积分,就必须事先构造一个人为的概率过程,它的某些参量正好是所要求问题的解。即要将不具有随机性质的问题转化为随原创 2021-09-14 15:02:06 · 374 阅读 · 0 评论 -
推箱子小游戏---c语言
推箱子游戏特色1、游戏同时支持鼠标和键盘操作,鼠标操作时,可点击任意你想去的地方。2、提供回复上一步的功能,可以回到任何一步走过的路径,可以给用户足够的思考空间,使用户的智力在游戏的乐趣中得到充分的锻炼。也可以一退到底。3、屏幕上方显示当前的关数,您可以方便地选关进行游戏。4、在目标文件夹里,可以用记事本打开Map.dat文件,自行设计游戏关卡,加载界面及元素,添加后再次打开程序才能更新。#include <stdio.h>#include <stdlib.h原创 2021-08-18 15:22:37 · 209 阅读 · 0 评论 -
PAT 反转链表
反转链表题目描述:给定一个常数K以及一个单链表L,请编写程序将L中每K个结点反转。例如:给定L为1→2→3→4→5→6,K为3,则输出应该为3→2→1→6→5→4;如果K为4,则输出应该为4→3→2→1→5→6,即最后不到K个元素不反转。输入描述:每个输入包含1个测试用例。每个测试用例第1行给出第1个结点的地址、结点总个数正整数N(<= 105)、以及正整数K(<=N),即要求反转的子链结点的个数。结点的地址是5位非负整数,NULL地址用-1表示。接下来有N行,每行格式为:Add原创 2021-08-05 20:06:48 · 101 阅读 · 0 评论 -
PAT 科学计数法
科学计数法**题目描述:**科学计数法是科学家用来表示很大或很小的数字的一种方便的方法,其满足正则表达式[+-][1-9]"."[0-9]+E[+-][0-9]+,即数字的整数部分只有1位,小数部分至少有1位,该数字及其指数部分的正负号即使对正数也必定明确给出。现以科学计数法的格式给出实数A,请编写程序按普通数字表示法输出A,并保证所有有效位都被保留。#include <stdio.h>int main(){ char str[10000]; char ds[10000原创 2021-08-05 20:01:00 · 192 阅读 · 0 评论 -
PAT 组个最小数
组个最小数给定数字0-9各若干个。你可以以任意顺序排列这些数字,但必须全部使用。目标是使得最后得到的数尽可能小(注意0不能做首位)。例如:给定两个0,两个1,三个5,一个8,我们得到的最小的数就是10015558。现给定数字,请编写程序输出能够组成的最小的数。输入描述:每个输入包含1个测试用例。每个测试用例在一行中给出10个非负整数,顺序表示我们拥有数字0、数字1、……数字9的个数。整数间用一个空格分隔。10个数字的总个数不超过50,且至少拥有1个非0的数字。输出描述:在一行中输出原创 2021-08-05 19:58:33 · 79 阅读 · 0 评论 -
数据结构---外部排序
外部排序外部排序:由于计算机内存有限,当数据量过大时,数据不能一次性加载到内存中,数据保存在外存中(硬盘,文件里面)上,(寄存器>Cache>内存>固态硬盘>机械硬盘),限制外部排序效率的是IO(读写)的效率。如果要提高外部排序的效率,就要减少IO次数。一般来说外排序分为两个步骤:预处理和合并排序。首先,根据可用内存的大小,将外存上含有n个纪录的文件分成若干长度为t的子文件(或段);其次,利用内部排序的方法,对每个子文件的t个纪录进行内部排序。这些经过排序的子文件(段)通常称为原创 2021-08-03 18:43:00 · 1276 阅读 · 0 评论 -
PAT D进制的A+B
D进制的A+B输入两个非负10进制整数A和B(<=230-1),输出A+B的D (1 < D <= 10)进制数。#include <stdio.h>int main(){ int i = 0,j; int sum = 0,a,b,d; int arr[101] = {0}; scanf("%d%d%d",&a,&b,&d); sum = a+b; while(sum!=0) { arr[i++] = sum%d; s原创 2021-08-02 19:23:40 · 87 阅读 · 0 评论 -
PAT个位数统计
个位数统计给定一个k位整数N = dk-110k-1 + … + d1101 + d0 (0<=di<=9, i=0,…,k-1, dk-1>0),请编写程序统计每种不同的个位数字出现的次数。例如:给定N = 100311,则有2个0,3个1,和1个3。#include <stdio.h>#include <string.h>#include <stdlib.h>#define max 1000int main(){ int i =原创 2021-07-31 15:26:27 · 70 阅读 · 0 评论 -
PAT 月饼
月饼月饼是中国人在中秋佳节时吃的一种传统食品,不同地区有许多不同风味的月饼。现给定所有种类月饼的库存量、总售价、以及市场的最大需求量,请你计算可以获得的最大收益是多少。注意:销售时允许取出一部分库存。样例给出的情形是这样的:假如我们有3种月饼,其库存量分别为18、15、10万吨,总售价分别为75、72、45亿元。如果市场的最大需求量只有20万吨,那么我们最大收益策略应该是卖出全部15万吨第2种月饼、以及5万吨第3种月饼,获得72 + 45/2 = 94.5(亿元)。输入描述:每个输入包含1个测原创 2021-07-31 15:21:49 · 128 阅读 · 0 评论 -
PAT 数字黑洞 ----- c语言
数字黑洞定任一个各位数字不完全相同的4位正整数,如果我们先把4个数字按非递增排序,再按非递减排序,然后用第1个数字减第2个数字,将得到一个新的数字。一直重复这样做,我们很快会停在有“数字黑洞”之称的6174,这个神奇的数字也叫Kaprekar常数。例如,我们从6767开始,将得到7766 - 6677 = 10899810 - 0189 = 96219621 - 1269 = 83528532 - 2358 = 61747641 - 1467 = 6174… …现给定任意4位正整数,请编原创 2021-07-31 15:19:54 · 131 阅读 · 0 评论 -
数据结构 15种内部排序方法 --- c语言
内部排序排序是计算机内经常进行的一种操作,其目的是将一组"无序"的记录序列调整为"有序"的记录序列。分内部排序和外部排序。若整个排序过程不需要访问外存便能完成,则称此类排序问题为内部排序。反之,若参加排序的记录数量很大,整个序列的排序过程不可能在内存中完成,则称此类排序问题为外部排序。内部排序的过程是一个逐步扩大记录的有序序列长度的过程。将杂乱无章的数据元素,通过一定的方法按关键字顺序排列的过程叫做排序。假定在待排序的记录序列中,存在多个具有相同的关键字的记录,若经过排序,这些记录的相对次序保持原创 2021-07-31 11:01:39 · 935 阅读 · 0 评论 -
图的应用及经典算法-----最短路径算法合集----c语言
最短路径定义最短路径问题是图论研究中的一个经典算法问题, 旨在寻找图(由结点和路径组成的)中两结点之间的最短路径。 算法具体的形式包括:确定起点的最短路径问题 - 即已知起始结点,求最短路径的问题。确定终点的最短路径问题 - 与确定起点的问题相反,该问题是已知终结结点,求最短路径的问题。在无向图中该问题与确定起点的问题完全等同,在有向图中该问题等同于把所有路径方向反转的确定起点的问题。确定起点终点的最短路径问题 - 即已知起点和终点,求两结点之间的最短路径。全局最短路径问题 - 求图原创 2021-07-30 14:09:53 · 651 阅读 · 0 评论 -
图的算法与应用 关键路径 --- c语言
拓扑排序对一个有向无环图(Directed Acyclic Graph简称DAG)G进行拓扑排序,是将G中所有顶点排成一个线性序列,使得图中任意一对顶点u和v,若边<u,v>∈E(G),则u在线性序列中出现在v之前。通常,这样的线性序列称为满足拓扑次序(Topological Order)的序列,简称拓扑序列。简单的说,由某个集合上的一个偏序得到该集合上的一个全序,这个操作称之为拓扑排序。由AOV网构造拓扑序列的拓扑排序算法主要是循环执行以下两步,直到不存在入度为0的顶点为止。(原创 2021-07-29 22:25:23 · 296 阅读 · 0 评论 -
图的应用 最小支撑树 ----c语言
Prim算法普里姆算法(Prim算法),图论中的一种算法,可在加权连通图里搜索最小生成树。意即由此算法搜索到的边子集所构成的树中,不但包括了连通图里的所有顶点(英语:Vertex (graph theory)),且其所有边的权值之和亦为最小。假设V是图中顶点的集合,E是图中边的集合,TE为最小生成树中的边的集合,则prim算法通过以下步骤可以得到最小生成树:1:初始化:U={u 0},TE={f}。此步骤设立一个只有结点u 0的结点集U和一个空的边集TE作为最小生成树的初始形态,在随后的算法执行原创 2021-07-29 22:12:10 · 1105 阅读 · 0 评论 -
图的应用 DFS与BFS算法----c语言
深度优先遍历 DFS假设给定图G的初态是所有顶点均未曾访问过。在G中任选一顶点v为初始出发点(源点),则深度优先遍历可定义如下:首先访问出发点v,并将其标记为已访问过;然后依次从v出发搜索v的每个邻接点w。若w未曾访问过,则以w为新的出发点继续进行深度优先遍历,直至图中所有和源点v有路径相通的顶点(亦称为从源点可达的顶点)均已被访问为止。若此时图中仍有未访问的顶点,则另选一个尚未访问的顶点作为新的源点重复上述过程,直至图中所有顶点均已被访问为止。图的深度优先遍历类似于树的前序遍历。采用的搜索方法的原创 2021-07-29 19:48:14 · 571 阅读 · 0 评论 -
数据结构 图的邻接表和邻接矩阵实现———c语言
图的邻接矩阵实现逻辑结构分为两部分:V和E集合。因此,用一个一维数组存放图中所有顶点数据;用一个二维数组存放顶点间关系(边或弧)的数据,这个二维数组称为邻接矩阵。邻接矩阵又分为有向图邻接矩阵和无向图邻接矩阵邻接矩阵(Adjacency Matrix):是表示顶点之间相邻关系的矩阵。设G=(V,E)是一个图,其中V={v1,v2,…,vn}。G的邻接矩阵是一个具有下列性质的n阶方阵:①对无向图而言,邻接矩阵一定是对称的,而且主对角线一定为零(在此仅讨论无向简单图),副对角线不一定为0,有向图则不一原创 2021-07-29 19:29:07 · 1382 阅读 · 0 评论 -
数字分类——c语言描述
数字分类给定一系列正整数,请按要求对数字进行分类,并输出以下5个数字:A1 = 能被5整除的数字中所有偶数的和;A2 = 将被5除后余1的数字按给出顺序进行交错求和,即计算n1-n2+n3-n4…;A3 = 被5除后余2的数字的个数;A4 = 被5除后余3的数字的平均数,精确到小数点后1位;A5 = 被5除后余4的数字中最大数字。#include <stdio.h>#include <math.h>int main(){ int N,i,num[1000] =原创 2021-07-26 22:08:36 · 374 阅读 · 0 评论 -
PAT 乙级 1018 锤子剪刀布
1018 锤子剪刀布大家应该都会玩“锤子剪刀布”的游戏:两人同时给出手势,胜负规则现给出两人的交锋记录,请统计双方的胜、平、负次数,并且给出双方分别出什么手势的胜算最大。输入格式:输入第 1 行给出正整数 N(≤105 ),即双方交锋的次数。随后 N 行,每行给出一次交锋的信息,即甲、乙双方同时给出的的手势。C 代表“锤子”、J 代表“剪刀”、B 代表“布”,第 1 个字母代表甲方,第 2 个代表乙方,中间有 1 个空格。输出格式:输出第 1、2 行分别给出甲、乙的胜、平、负次数,数字原创 2021-07-26 22:06:18 · 70 阅读 · 0 评论 -
PAT 乙级 1017 A除以B
1017 A除以B本题要求计算A/B,其中A是不超过1000位的正整数,B是1位正整数。你需要输出商数Q和余数R,使得A = B * Q + R成立。输入格式:输入在1行中依次给出A和B,中间以1空格分隔。输出格式:在1行中依次输出Q和R,中间以1空格分隔。输入样例:123456789050987654321 7输出样例:17636684150141093474 3#include <stdio.h>#include <string.h>int main()原创 2021-07-26 22:04:05 · 62 阅读 · 0 评论 -
PAT 1016 部分A+B
1016 部分A+B正整数 A 的“D A (为 1 位整数)部分”定义为由 A 中所有 D A 组成的新整数 P A 。例如:给定 A=3862767,D A =6,则 A 的“6 部分”P A 是 66,因为 A 中有 2 个 6。 现给定 A、D A 、B、D B ,请编写程序计算 P A +P B 。#include <stdio.h>#include <string.h>int main(原创 2021-07-26 22:02:15 · 51 阅读 · 0 评论 -
红黑树--c语言实现
红黑树红黑树是每个节点都带有颜色属性的二叉查找树,颜色或红色或黑色。在二叉查找树强制一般要求以外,对于任何有效的红黑树我们增加了如下的额外要求:性质1. 节点是红色或黑色。性质2. 根节点是黑色。性质3. 每个叶节点(NIL节点,空节点)是黑色的。性质4. 每个红色节点的两个子节点都是黑色。(从每个叶子到根的所有路径上不能有两个连续的红色节点)性质5. 从任一节点到其每个叶子的所有路径都包含相同数目的黑色节点。这些约束强制了红黑树的关键性质: 从根到叶子的最长的可能原创 2021-07-25 19:52:39 · 1145 阅读 · 0 评论 -
平衡二叉树代码 栈实现
平衡二叉树定义:平衡二叉搜索树(Self-balancing binary search tree)又被称为AVL树(有别于AVL算法),且具有以下性质:它是一棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树。平衡二叉树的常用实现方法有红黑树、AVL、替罪羊树、Treap、伸展树等。 最小二叉平衡树的节点总数的公式如下 F(n)=F(n-1)+F(n-2)+1 这个类似于一个递归的数列,可以参考Fibonacci(斐波那契)数列,1是根节点,F(n-1)是左子树的节点原创 2021-07-25 19:46:53 · 154 阅读 · 0 评论 -
PAT 乙级 1015 德才论
1015 德才论输入第一行给出 3 个正整数,分别为:N(≤10^5),即考生总数;L(≥60),为录取最低分数线,即德分和才分均不低于 L 的考生才有资格被考虑录取;H(<100),为优先录取线——德分和才分均不低于此线的被定义为“才德全尽”,此类考生按德才总分从高到低排序;才分不到但德分到线的一类考生属于“德胜才”,也按总分排序,但排在第一类考生之后;德才分均低于 H,但是德分不低于才分的考生属于“才德兼亡”但尚有“德胜才”者,按总分排序,但排在第二类考生之后;其他达到最低线 L 的考生也按总原创 2021-07-22 21:42:10 · 110 阅读 · 0 评论 -
PAT 乙级 1014 福尔摩斯的约会
1014 福尔摩斯的约会大侦探福尔摩斯接到一张奇怪的字条:我们约会吧! 3485djDkxh4hhGE 2984akDfkkkkggEdsb s&hgsfdk d&Hyscvnm。大侦探很快就明白了,字条上奇怪的乱码实际上就是约会的时间星期四 14:04,因为前面两字符串中第 1 对相同的大写英文字母(大小写有区分)是第 4 个字母 D,代表星期四;第 2 对相同的字符是 E ,那是第 5 个英文字母,代表一天里的第 14 个钟头(于是一天的 0 点到 23 点由数字 0 到 9、以及大写原创 2021-07-22 21:38:20 · 158 阅读 · 0 评论 -
数据结构 二叉排序树
二叉排序树二叉排序树(Binary Sort Tree)或者是一棵空树;或者是具有下列性质的二叉树:(1)若左子树不空,则左子树上所有结点的值均小于它的根结点的值;(2)若右子树不空,则右子树上所有结点的值均大于它的根结点的值;(3)左、右子树也分别为二叉排序树;基本步骤若根结点的关键字值等于查找的关键字,成功。否则,若小于根结点的关键字值,递归查左子树。若大于根结点的关键字值,递归查右子树。若子树为空,查找不成功。插入算法:首先执行查找算法,找出被插结点的父亲结点。判断被插结点是其原创 2021-07-22 21:32:28 · 342 阅读 · 0 评论 -
PAT 乙级 1013 数素数
1013 数素数令 P i 表示第 i 个素数。现任给两个正整数 M≤N≤10 4 ,请输出 P M 到 P N 的所有素数。输入 5 27输出11 13 17 19 23 29 31 37 41 4347 53 59 61 67 71 73 79 83 8997 101 103#include <stdio.h>#include <math.h>int isprime(int num){ int i; for(i = 2原创 2021-07-20 18:57:24 · 60 阅读 · 0 评论 -
PAT 乙级 1012 数字分类
1012 数字分类给定一系列正整数,请按要求对数字进行分类,并输出以下 5 个数字:A 1 = 能被 5 整除的数字中所有偶数的和;A 2 = 将被 5 除后余 1 的数字按给出顺序进行交错求和,即计算 n 1 −n 2 +n 3 −n 4 ⋯;A 3 = 被 5 除后余 2 的数字的个数;A 4 = 被 5 除后余 3 的数字的平均数,精确到小数点后 1 位;A 5 = 被 5 除后余 4 的数字中最大数字。#原创 2021-07-20 18:55:45 · 91 阅读 · 0 评论 -
PAT乙级 1011 A+B 和 C
1011 A+B 和 C给定区间 [−2 31 ,2 31 ] 内的 3 个整数 A、B 和 C,请判断 A+B 是否大于 C。输入格式:输入第 1 行给出正整数 T (≤10),是测试用例的个数。随后给出 T 组测试用例,每组占一行,顺序给出 A、B 和 C。整数间以空格分隔。输出格式:对每组测试用例,在一行中输出 Case #X: true 如果 A+B>C,否则输出 Case #X: false,其中 X 是测试用例的编号(从 1 开始)。输入样例:41 2 3原创 2021-07-20 18:53:50 · 68 阅读 · 0 评论 -
数据结构 队列实现
队列队列(queue)在计算机科学中,是一种先进先出的线性表。队列是一种特殊的线性表,特殊之处在于它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作,和栈一样,队列是一种操作受限制的线性表。进行插入操作的端称为队尾,进行删除操作的端称为队头。main函数测试函数#include <stdio.h>#include <stdlib.h>#include "queue.h"void show_menu(void){ printf("**原创 2021-07-20 08:32:21 · 203 阅读 · 0 评论 -
数据结构 链栈的实现
链栈链栈是一种数据存储结构,可以通过单链表的方式来实现,使用链栈的优点在于它能够克服用数组实现的顺序栈空间利用率不高的特点,但是需要为每个栈元素分配额外的指针空间用来存放指针域。测试函数#include <stdio.h>#include <stdlib.h>#include "linkedstack.h" //入栈顺序保存在in[]数组中,out[]数组序列能不能作为出栈序列 bool is_stack_in_out(int in[],int out[],int原创 2021-07-19 18:32:25 · 313 阅读 · 1 评论 -
数据结构 顺序栈的实现
顺序栈main函数 函数测试#include <stdio.h>#include <stdlib.h>#include "stack.h"#include "SeqStack.h"void show_menu(void){ printf("******栈功能测试界面******\n"); printf("*** 1.栈压入元素 \n"); printf("*** 2.栈弹出元素 \n"); printf("*** 3.查看栈顶元素 \n"); printf(原创 2021-07-18 20:34:46 · 197 阅读 · 0 评论 -
数据结构 循环双链表
循环双链表头文件#ifndef _CIR_DLINKED_LIST_H__#define _CIR_DLINKED_LIST_H__#include <stdio.h>#include <string.h>#include <stdlib.h>#include <stdbool.h>//双向循环链表的结点 typedef struct CDNode{ void *pelem; struct CDNode *prev; struct原创 2021-07-17 11:17:16 · 104 阅读 · 0 评论 -
数据结构 带头尾结点的双链表
带头尾结点的双链表头文件#ifndef DLINKED_LIST_H__#define DLINKED_LIST_H__#include <stdio.h>#include <stdlib.h>#include <stdbool.h>typedef int ETYPE;typedef struct DNode{ ETYPE elem; //结点元素 数据域 struct DNode *prev; //前结点位置 内存地址 s原创 2021-07-17 11:15:34 · 321 阅读 · 0 评论 -
数据结构 双链表
双链表头文件#ifndef _DLINKED_LIST_H__#define _DLINKED_LIST_H__#include <stdio.h>#include <stdlib.h>#include <stdbool.h>/*typedef struct DNode{ void *pelem; struct DNode *prev; struct DNode *next;}DNode;typedef struct DLinkedL{ si原创 2021-07-17 11:08:38 · 100 阅读 · 1 评论 -
数据结构 链表万能形式
万能链表main 函数,测试代码#include <stdio.h>#include <stdlib.h>#include "slinkedlist.h"typedef struct Stu{ int no; char name[40]; int score[3];}Stu; int comp_no(const void *v1,const void *v2){ const struct Stu *ps1 = (const struct Stu *)v1;原创 2021-07-17 11:01:20 · 222 阅读 · 0 评论 -
数据结构 顺序表实现详解
顺序表main函数,测试代码#include <stdio.h>#include <stdlib.h>#include "seqlist.h"#include <stdbool.h> /* run this program using the console pauser or add your own getch, system("pause") or input loop */ void showmenu(void){ printf("1.插入元原创 2021-07-17 10:55:51 · 114 阅读 · 0 评论 -
数据结构与算法 链表详解
数据结构与算法链表测试调用函数:#include <stdio.h>#include <stdlib.h>#include "singlelinketlist.h"void showMenu(void){ printf("***单向链表功能测试*****\n"); printf("** 1.插入一个元素 \n"); printf("** 2.查找 \n"); printf("** 3.链表为空判断 \n"); printf("** 4.元素个数 \n");原创 2021-07-16 18:05:29 · 158 阅读 · 0 评论 -
PAT 乙级1010 一元多项式求导
1010 一元多项式求导设计函数求一元多项式的导数。(注:x n (n为整数)的一阶导数为nx n−1 。)输入格式:以指数递降方式输入多项式非零项系数和指数(绝对值均为不超过 1000 的整数)。数字间以空格分隔。输出格式:以与输入相同的格式输出导数多项式非零项的系数和指数。数字间以空格分隔,但结尾不能有多余空格。注意“零多项式”的指数和系数都是 0,但是表示为 0 0。#include <stdio.h>int main(){ int a,b; scan原创 2021-07-15 18:43:56 · 68 阅读 · 0 评论 -
PAT 乙级 1009 说反话
1009 说反话给定一句英语,要求你编写程序,将句中所有单词的顺序颠倒输出。测试输入包含一个测试用例,在一行内给出总长度不超过 80 的字符串。字符串由若干单词和若干空格组成,其中单词是由英文字母(大小写有区分)组成的字符串,单词之间用 1 个空格分开,输入保证句子末尾没有多余的空格。输入Hello World Here I Come输出Come I Here World Hello#include <stdio.h>#include <string.h>int原创 2021-07-15 18:42:40 · 73 阅读 · 0 评论 -
PAT 乙级 1008 数组元素循环右移问题
1008 数组元素循环右移问题一个数组A中存有N(>0)个整数,在不允许使用另外数组的前提下,将每个整数循环向右移M(≥0)个位置,即将A中的数据由(A 0 A 1 ⋯A N−1 )变换为(A N−M ⋯A N−1 A 0 A 1 ⋯A N−M−1 )(最后M个数循环移至最前面的M个位置)。如果需要考虑程序移动数据的次数尽量少,要如何设计移动的方法?#include <stdio.h>int main(){ int原创 2021-07-15 18:41:03 · 82 阅读 · 0 评论