- 博客(23)
- 收藏
- 关注
原创 2021蓝桥杯C/C++B组真题
1.空间小蓝准备用256MB的内存空间开一个数组,数组的每个元素都是32 位二进制整数。如果不考虑程序占用的空间和维护内存需要的辅助空间,请问256MB 的空间可以存储多少个32 位二进制整数?256x1024x1024x8/32=671088642.卡片小蓝有很多数字卡片,每张卡片上都是数字0到9。小蓝准备用这些卡片来拼一些数,他想从1开始拼出正整数,每拼一个,就保存起来,卡片就不能用来拼其它数了。小蓝想知道自己能从1 拼到多少。例如,当小蓝有30 张卡片,其中0到9 各3 张,则小蓝可以拼
2022-04-03 15:00:41 6656
原创 2016蓝桥杯C/C++B组真题(6-9)
6.方格填数如下的10个格子填入0~9的数字。要求:连续的两个数字不能相邻。(左右、上下、对角都算相邻)一共有多少种可能的填数方案?请填写表示方案数目的整数。注意:你提交的应该是一个整数,不要填写任何多余的内容或说明性文字。7.剪邮票有12张连在一起的12生肖的邮票现在你要从中剪下5张来,要求必须是连着的。(仅仅连接一个角不算相连)比如,粉红色所示部分就是合格的剪取请你计算,一共有多少种不同的剪取方法。请填写表示方案数目的整数。注意:你提交的应该是一个整数,不要填写任
2022-03-27 21:18:12 185
原创 2016蓝桥杯C/C++B组真题(1-5)
1.煤球数目有一堆煤球,堆成三角棱锥形。具体:第一层放1个,第二层3个(排列成三角形),第三层6个(排列成三角形),第四层10个(排列成三角形),…如果一共有100层,共有多少个煤球?请填表示煤球总数目的数字。注意:你提交的应该是一个整数,不要填写任何多余的内容或说明性文字。#include<iostream>using namespace std;int main(){ int sum = 0; int count = 0; for(int i=1;i<=1
2022-03-26 22:40:53 166
原创 2015蓝桥杯C/C++B组真题(6-8)
6.加法变乘法我们都知道:1+2+3+ … + 49 = 1225现在要求你把其中两个不相邻的加号变成乘号,使得结果为2015比如:1+2+3+…+1011+12+…+2728+29+…+49 = 2015就是符合要求的答案。请你寻找另外一个可能的答案,并把位置靠前的那个乘号左边的数字提交(对于示例,就是提交10)。注意:需要你提交的是一个整数,不要填写任何多余的内容。7.牌型种数小明被劫持到X赌城,被迫与其他3人玩牌。一副扑克牌(去掉大小王牌,共52张),均匀发给4个人,每个人13张。
2022-03-26 18:37:18 135
原创 2015蓝桥杯C/C++B组真题(1-5)
1.奖券数目有些人很迷信数字,比如带“4”的数字,认为和“死”谐音,就觉得不吉利。虽然这些说法纯属无稽之谈,但有时还要迎合大众的需求。某抽奖活动的奖券号码是5位数(10000-99999),要求其中不要出现带“4”的号码,主办单位请你计算一下,如果任何两张奖券不重号,最多可发出奖券多少张。请提交该数字(一个整数),不要写任何多余的内容或说明性文字。方法一:数学计算:89999 = 52488方法二:加上含有4的奖券号码,总共有99999-10000+1个号码可以用。求出含有4的奖券号码的个数
2022-03-18 10:36:18 1094
原创 动态规划--
动态规划(Dynamic Programming,DP)是运筹学的一个分支,是求解决策过程最优化的过程动态规划与分治方法类似,都是通过组合子问题的解来来求解原问题的。再来了解一下什么是分治方法,以及这两者之间的差别,分治方法将问题划分为互不相交的子问题,递归的求解子问题,再将它们的解组合起来,求出原问题的解。而动态规划与之相反,动态规划应用与子问题重叠的情况,即不同的子问题具有公共的子子问题(子问题的求解是递归进行的,将其划分为更小的子子问题)。在这种情况下,分治方法会做许多不必要的工作,他会反复求解那些
2022-03-14 15:04:32 88
原创 贪心算法--
贪心算法(又称贪婪算法)是指,在对问题求解时,总是做出在当前看来是最好的选择。也就是说,不从整体最优上加以考虑,算法得到的是在某种意义上的局部最优解。贪心算法不是对所有问题都能得到整体最优解,关键是贪心策略的选择。贪心算法一般按如下步骤进行:①建立数学模型来描述问题②把求解的问题分成若干个子问题③对每个子问题求解,得到子问题的局部最优解④把子问题的解局部最优解合成原来解问题的一个解例如,平时购物找零钱时,为使找回的零钱的硬币数最少,不要求找零钱的所有方案,而是从最大面值的币种开始,按递减的顺序考
2022-03-14 10:43:36 103
原创 排序--桶排序,基数排序
桶排序 (Bucket sort)或所谓的箱排序,是一个排序算法,工作的原理是将数组分到有限数量的桶里。每个桶再个别排序(有可能再使用别的排序算法或是以递归方式继续使用桶排序进行排序)。桶排序是鸽巢排序的一种归纳结果。当要被排序的数组内的数值是均匀分配的时候,桶排序使用线性时间(Θ(n))。但桶排序并不是比较排序,他不受到 O(n log n) 下限的影响。基数排序(radix sort)属于“分配式排序”(distribution sort),又称“桶子法”(bucket sort)或bin sort
2022-03-09 20:15:44 71
原创 排序--计数排序
计数排序是一个非基于比较的排序算法,该算法于1954年由 Harold H. Seward 提出。它的优势在于在对一定范围内的整数排序时,它的复杂度为Ο(n+k)(其中k是整数的范围),快于任何比较排序算法。当然这是一种牺牲空间换取时间的做法,而且当O(k)>O(nlog(n))的时候其效率反而不如基于比较的排序(基于比较的排序的时间复杂度在理论上的下限是O(nlog(n)), 如归并排序,堆排序)过程:假设输入的线性表L的长度为n,L=L1,L2,…,Ln;线性表的元素属于有限偏序集S,|S|=
2022-03-08 20:11:48 81
原创 排序--归并排序
归并操作,也叫归并算法,指的是将两个顺序序列合并成一个顺序序列的方法。归并操作的工作原理:申请空间,使其大小为两个已经排序序列之和,该空间用来存放合并后的序列设定两个指针,最初位置分别为两个已经排序序列的起始位置比较两个指针所指向的元素,选择相对小的元素放入到合并空间,并移动指针到下一位置重复步骤3直到某一指针超出序列尾将另一序列剩下的所有元素直接复制到合并序列尾在这里插入代码片...
2022-03-07 15:14:33 331
原创 排序--堆排序(2)
堆排序(Heapsort)是指利用堆这种数据结构所设计的一种排序算法。堆积是一个近似完全二叉树的结构,并同时满足堆积的性质:即子结点的键值或索引总是小于(或者大于)它的父节点。堆排序可以说是一种利用堆的概念来排序的选择排序。分为两种方法:大顶堆:每个节点的值都大于或等于其子节点的值,在堆排序算法中用于升序排列;小顶堆:每个节点的值都小于或等于其子节点的值,在堆排序算法中用于降序排列;堆排序的平均时间复杂度为 Ο(nlogn)。步骤:建立堆(从最小的堆排序)得到堆顶元素,为最大元素去掉堆顶,将
2022-03-05 11:33:06 57
原创 排序--堆排序(1)
一.树与二叉树树是一种数据结构 如:目录结构树是一种可以递归定义的数据结构:树是包含n(n>0)个结点的有穷集,其中:(1)每个元素称为结点(node);(2)有一个特定的结点被称为根结点或树根(root)。(3)除根结点之外的其余数据元素被分为m(m≥0)个互不相交的集合T1,T2,……Tm-1,其中每一个集合Ti(1<=i<=m)本身也是一棵树,被称作原树的子树(subtree)。节点的度:一个节点含有的子树的个数称为该节点的度(分了几个叉)叶节点或终端节点:度为0
2022-03-02 18:44:46 222
原创 排序--快速排序
快速排序:对冒泡排序算法的一种改进 快思路:取一个元素p(第一个元素),使元素p归位列表被p分成两部分,左边都比p小,右边都比p大递归完成排序#include <iostream> using namespace std; void Qsort(int arr[], int low, int high){ if (high <= low) return; int i = low; int j = high + 1; int key =
2022-02-28 20:45:28 399
原创 排序--插入排序
插入排序,一般也被称为直接插入排序。对于少量元素的排序,它是一个有效的算法 。插入排序是一种最简单的排序方法。基本思想:将一个记录插入到已经排好序的有序表中,从而一个新的、记录数增1的有序表。在其实现过程使用双层循环,外层循环对除了第一个元素之外的所有元素,内层循环对当前元素前面有序表进行待插入位置查找,并进行移动 。插入排序的工作方式像排序一手扑克牌。开始时,我们的左手为空并且桌子上的牌面向下。然后,我们每次从桌子上拿走一张牌并将它插入左手中正确的位置。为了找到一张牌的正确位置,我们从右到左将它与
2022-02-28 15:33:01 560
原创 排序--选择排序
选择排序(Selection sort)是一种简单直观的排序算法。工作原理:第一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,然后再从剩余的未排序元素中寻找到最小(大)元素,然后放到已排序的序列的末尾。以此类推,直到全部待排序的数据元素的个数为零。选择排序是不稳定的排序方法初始状态:无序区为R[0…n-1](共n个元素),有序区为空//C#include<stdio.h>void swap(int *a,int *b) { int temp =
2022-02-27 19:53:00 82
原创 排序--冒泡排序
冒泡排序算法的原理:比较相邻的元素,如果第一个比第二个大,就交换他们两个。对每一对相邻元素做同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会 是最大的数。针对所有的元素重复以上的步骤,除了最后一个。持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。时间复杂度若文件的初始状态是正序的,一趟扫描即可完成排序。所以冒泡排序最好的时间复杂度为O(n) 。若初始文件是反序的,需要进行n-1趟排序。每趟排序要进行n-i次关键字的比较(1≤i≤n-1),且
2022-02-27 16:27:51 129
原创 列表查找--顺序查找,二分查找
一.顺序查找顺序查找是按照序列原有顺序对数组进行遍历比较查询的基本查找算法,也叫线性查找。基本原理:对于任意一个序列以及一个给定的元素,将给定元素与序列中元素依次比较,直到找出与给定关键字相同的元素,或者将序列中的元素与其都比较完为止。int Seqsch(ElemType A[ ],int n,KeyType K) {//从顺序表A的n个元素中顺序查找关键字为K的元素,若成功返回其下标,否则返回-1 int i; for( i=0;i<n;i++){ if(A
2022-02-27 10:21:57 594
原创 递归练习题
1.斐波那契数列斐波那契数列(Fibonacci sequence),又称黄金分割数列,因数学家莱昂纳多·斐波那契(Leonardo Fibonacci)以兔子繁殖为例子而引入,故又称为“兔子数列”,指的是这样一个数列:1、1、2、3、5、8、13、21、34、……在数学上,斐波那契数列以如下被以递推的方法定义:F(0)=0,F(1)=1, F(n)=F(n - 1)+F(n - 2)(n ≥ 2,n ∈ N*)#include<iostream>using namespace std;
2022-02-26 10:14:00 190
原创 递归--汉诺塔问题
递归的两个特点:调用自身结束条件先打印后递归 和 先递归后打印的区别结果: 3 2 1 和 1 2 3汉诺塔问题:相传在古印度圣庙中,有一种被称为汉诺塔(Hanoi)的游戏。该游戏是在一块铜板装置上,有三根杆(编号A、B、C),在A杆自下而上、由大到小按顺序放置64个金盘。游戏的目标:把A杆上的金盘全部移到C杆上,并仍保持原有顺序叠好。操作规则:每次只能移动一个盘子,并且在移动过程中三根杆上都始终保持大盘在下,小盘在上,操作过程中盘子可以置于A、B、C任一杆上。n=2 :
2022-02-25 21:23:22 74
原创 时间复杂度和空间复杂度
算法Algorithm:一个计算过程,解决问题的方法程序=数据结构+算法一.时间复杂度算法的时间复杂度是一个函数,它定性描述该算法的运行时间时间复杂度分析:只关注循环执行次数最多的一段代码总复杂度等于最高阶项的复杂度,常量级可忽略嵌套代码复杂度等于内外代码复杂度的乘积简单快速判断方法:确定问题规模n循环减半过程——lognk层关于n的循环——n^k常见的时间复杂度(按效率排序):O(1)< O(logn)< O(n)< O(nlogn)< O(n^
2022-02-25 16:08:14 218
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人