- 博客(52)
- 问答 (1)
- 收藏
- 关注
原创 蓝桥杯——历届真题 异或数列-python(思路非原创)
思路参考链接:https://blog.youkuaiyun.com/zy98zy998/article/details/122279183def check(li):#因为无论怎么选择,li中的所有元素都要经历一次异或#两人平局时,两人的最终的数一样,即所有的元素异或的结果为0时,两人平局#计算每个位1的个数 result=0 max1=0 for i in li[1:]: result=result^i max1=max(max1,i) if
2022-03-20 12:37:07
1598
2
原创 蓝桥杯——历届真题左hai子右兄弟-python
思路:dp,树转换为左孩子右兄弟的二叉树后,以i为根的树的最大深度为节点i的孩 子数量+孩子中子树最深的深度。使用li[i]记录结点i的所有子节点,dp公式即为:孩子数+max(子树深度),即 len(li[i])+max(dptest(i1、2、3……))import syssys.setrecursionlimit(100000) #限制递归次数n=int(input())li=[[] for i in range(n+1)] #li[i]是结点i的所有子节点# li[i]=i的子节点
2022-03-19 12:30:08
1446
原创 蓝桥杯——算法提高 成绩排序-python
问题描述 给出n个学生的成绩,将这些学生按成绩排序, 排序规则,优先考虑数学成绩,高的在前;数学相同,英语高的在前;数学英语都相同,语文高的在前;三门都相同,学号小的在前输入格式 第一行一个正整数n,表示学生人数 接下来n行每行3个0~100的整数,第i行表示学号为i的学生的数学、英语、语文成绩输出格式 输出n行,每行表示一个学生的数学成绩、英语成绩、语文成绩、学号 按排序后的顺序输出样例输入21 2 32 3 4样例输出2 3 4 21 2 3 1思路:重要性数
2022-03-18 12:58:38
605
原创 蓝桥杯——试题 算法提高 身份证排序-python
问题描述 安全局搜索到了一批(n个)身份证号码,希望按出生日期对它们进行从大到小排序,如果有相同日期,则按身份证号码大小进行排序。身份证号码为18位的数字组成,出生日期为第7到第14位输入格式 第一行一个整数n,表示有n个身份证号码 余下的n行,每行一个身份证号码。输出格式 按出生日期从大到小排序后的身份证号,每行一条样例输入546627230750327115621585647220709797823480458040107836540447572770003498071
2022-03-16 20:59:55
521
原创 蓝桥杯——算法提高 12-2扑克排序-python
问题描述 扑克牌排序:构造扑克牌数组,对扑克牌进行排序。排序原则如下:数字从小到大是2-10、J、Q、K和A,花色从小到大是方块(diamond)、梅花(club)、红桃(heart)、黑桃(spade)。两张牌比较时先看数字,数字相同时看花色。要求对输入的扑克牌进行从小到大排序。 输入五张牌(表示黑桃2、红桃3、黑桃3、方块A和梅花J): 2 s 3 h 3 s A d J c 输出结果应为:2 s 3 h 3 s J c A d数组长度固定为5。参考思路:https://blog.dotc
2022-03-16 20:35:05
2822
原创 蓝桥杯——历届试题 回文日期-python
思路:每年都只有一个回文串例如1234年 就是12344321,所以根据前4位年份去构建对应的回文串,判断月份、日份是否在合法范围内即可。ABABBABA型同理只有一个,可以根据前2位构建这种类型的回文串。n=int(input())+1n1=n#用字典存储每个月对应的天数 xx为闰年时2月的天数dict={"01":31,"02":28,"03":31,"04":30,"05":31,"06":30,"07":31,"08":31,"09":30,"10":31,"11":30,"12":.
2022-03-10 12:01:06
7798
3
原创 蓝桥杯——历届试题 子串分值【第十一届】【省赛】-python
法1:暴力递归,分别计算每个子串的值 相加#递归:超时 def find(s): n=0 dic={} for i in range(len(s)): if s[i] in dic.keys(): dic[s[i]]+=1 else: dic[s[i]]=1 for k,v in dic.items(): if v==1: n+=1 return
2022-03-08 13:58:32
1074
原创 蓝桥杯——历届真题 外卖店优先级-python
问题描述 “饱了么”外卖系统中维护着N 家外卖店,编号1 N。每家外卖店都有 一个优先级,初始时(0 时刻) 优先级都为0。 每经过1 个时间单位,如果外卖店没有订单,则优先级会减少1,最低减 到0;而如果外卖店有订单,则优先级不减反加,每有一单优先级加2。 如果某家外卖店某时刻优先级大于5,则会被系统加入优先缓存中;如果 优先级小于等于3,则会被清除出优先缓存。 给定T 时刻以内的M 条订单信息,请你计算T 时刻时有多少外卖店在优 先缓存中。输入格式 第一行包含3 个
2022-03-06 21:40:03
424
原创 蓝桥杯——历届真题 完全二叉树的权值-python
问题描述 给定一棵包含 N 个节点的完全二叉树,树上每个节点都有一个权值,按从 上到下、从左到右的顺序依次是 A1, A2, · · · AN,如下图所示:现在小明要把相同深度的节点的权值加在一起,他想知道哪个深度的节点 权值之和最大?如果有多个深度的权值和同为最大,请你输出其中最小的深度。 注:根的深度是 1。输入格式 第一行包含一个整数 N。 第二行包含 N 个整数 A1, A2, · · · AN 。输出格式 输出一个整数代表答案。样例输入71 6 5 4
2022-03-03 15:40:49
662
原创 蓝桥杯——修改数组【第十届】【省赛】【研究生组】-python
历届真题 修改数组【第十届】【省赛】【研究生组】#暴力法(能通过3个)n=int(input())A=list(map(int,input().split()))temp=[]print(A)for i in range(n): while (A[i] in temp): A[i] += 1 print(A[i],end=" ") temp.append(A[i])#方法2(能通过4个) n=int(input()) A=list(map(int,
2022-03-02 14:11:03
6046
原创 蓝桥杯——算法训练 K好数-python
问题描述如果一个自然数N的K进制表示中任意的相邻的两位都不是相邻的数字,那么我们就说这个数是K好数。求L位K进制数中K好数的数目。例如K = 4,L = 2的时候,所有K好数为11、13、20、22、30、31、33 共7个。由于这个数目很大,请你输出它对1000000007取模后的值。输入格式输入包含两个正整数,K和L。输出格式输出一个整数,表示答案对1000000007取模后的值。思想:使用动态规划dp[i][j],dp[i][j]代表以i开头的j位数有多少个K好数,最终计算L位(即j位)K
2022-02-28 14:28:48
555
原创 蓝桥杯——算法训练 最大最小公倍数-python
问题描述已知一个正整数N,问从1~N中任选出三个数,他们的最小公倍数最大可以为多少。输入格式输入一个正整数N。输出格式输出一个整数,表示你找到的最小公倍数。思路:显然三个数互质的时候最小公倍数最大,即三数乘积。对于最大连着的3个数来说:如果最大的是奇数,例如31、32、33,则一定不存在两个3的倍数,所以n*(n-1)*(n-2)就是最大最小公倍数。如果最大的是偶数,例如30、31、32,则它们的最小公倍数至少要积除以2,所以奇-偶-奇的情况下 最小公倍数最大,奇-偶-奇有两种情况:32、3
2022-02-27 13:30:19
980
原创 蓝桥杯——算法训练 区间k大数查询-python
把区间内的数从大到小排列一下 取出对应位置的数即可。n=int(input()) #序列长度list1=list(map(int,input().split())) #给定的序列m=int(input()) #询问个数a=[]for i in range(m): a.append(list(map(int,input().split()))) #3个3个一组for temp in a: l=temp[0] r=temp[1] K=temp[2] li
2022-02-27 12:27:32
199
原创 蓝桥杯BASIC-21Sine之舞——python
def Sn(n,i): #S1=A1 #S2=(A1+2)*A2+1 #S3=((A1+3)*A2+2)A3+1 if n==1: return "sin(1)"+"+"+str(i) result1 = An(n) result = result1[:len(result1) - 1] for q in range(n): result += ")" return "("+Sn(n-1,i+1)+")"+r
2021-11-20 17:10:45
472
原创 蓝桥杯BASIC-19完美的代价——python
n=int(input())str=list(input())result=0k=0t=0while(k<int(n/2)): if t==2: #出现了2个匹配不到的情况 print("Impossible") exit() temp = 0 for i in range(n-k-1-t,k,-1): if str[i]==str[k]: result+=(n-i-k-1)
2021-11-20 16:35:02
3549
原创 蓝桥杯BASIC-14时间转换——python
n=int(input())a=n%60 #秒b=int((n-a)/60)%60 #分c=int((n-a-b*60)/60/60) #时print(str(c)+':'+str(b)+':'+str(a))
2021-11-06 14:58:00
455
原创 蓝桥杯BASIC-15字符串对比——python
ord(chr)能够让字符chr转换为Ascii码,通过Ascii码计算两个数是否为大小写关系(大小写间Ascii码差为32)str1=input()str2=input()temp1=0temp2=0if len(str1)!=len(str2): print(1)else: for i in range(0,len(str1)): if str1[i]!=str2[i]: temp1=1 if (ord(str
2021-11-06 14:46:53
370
原创 蓝桥杯BASIC-16分解质因数——python
用字典存储从4~b的所有结果a,b=map(int,input().split())dic={}for i in range(4,a+1): for j in range(2,int(i/2)+1): if i%j==0: p=int(i/j) if dic.get(p): dic[i]=str(j)+"*"+dic.get(p) else:
2021-11-06 14:27:11
129
原创 蓝桥杯BASIC-17矩阵乘法——python
m,n=map(int,input().split()) #m阶矩阵 幂为nif n==0: l = [[0] * m for i in range(m)] for i in range(m): l[i][i]=1 for i in range(m): for j in range(m): print(l[i][j],end=" ") print()else: l1=[] l2=[]
2021-11-04 14:07:53
174
原创 蓝桥杯BASIC-18矩形面积交——python
思想:两个矩形只有两种情况,一:相交;二:不相交。不相交时,某个矩形的两个横(纵)坐标同时大于或者同时小于另一个矩形的连个横(纵)坐标,直接print(“0.00”)即可相交时,4个横坐标从小到大排序,中间的两个即是相交的部分所对应的两个对角的横坐标,纵坐标也是同理为中间的两个。任意一个-另一个 取绝对值即可获得对应的边长。l1=list(map(float,input().split()))l2=list(map(float,input().split()))if (l1[0]>l2[0
2021-11-04 13:21:30
302
1
原创 蓝桥杯BASIC-20数的读法——python
思路:4位4位分开判断,经过无数次修改判断条件最终通过。现在我已经不知道我写的什么了,只知道写的是对的…n=int(input()) dic={0:"ling",1:"yi",2:"er",3:"san",4:"si",5:"wu",6:"liu",7:"qi",8:"ba",9:"jiu",10:"shi"} i=0 #位数 n1=n l1=[] temp=0 while n1!=0: i+=1 n1/=10 a=
2021-11-03 13:14:04
272
原创 蓝桥杯BASIC-22FJ的字符串——python
思路:观察发现每一次循环只需要增加一个对应B/C/D/E……后面的和前面的一样,所以可以分两步,先在原有基础上增加一个对应的字母B/C/D/E……,然后把前面的复制一下加到后面 即可。 N=int(input()) l1=['A'] for i in range(1,N): l2=[] l2.extend(l1) l1.append(chr(65+i)) l1.extend(l2) for i in range(
2021-11-02 21:22:57
235
原创 蓝桥杯BASIC-23芯片测试——python
思路:因为已知好芯片比坏芯片多,所以每一列如果1多,说明对应的芯片是好芯片,如果0多,说明对应的芯片是坏芯片。n=int(input()) l=[] for i in range(n): l.append(input().split()) a=0 b=0 for i in range(n): #lie for j in range(n): #hang if int(l[j][i])==0:
2021-11-02 20:58:04
371
原创 蓝桥杯BASIC-24龟兔赛跑预测——python
#注意:这道题是整数输入整数输出#兔子速度、乌龟速度、领先t米休息s秒、赛道长度v1,v2,t,s,l=map(int,input().split())x1=0 #兔子已经跑的距离x2=0 #乌龟已经跑的距离time=0 #经过的时间while x1<l and x2<l: x1+=v1 x2+=v2 time+=1 if(x1-x2>=t) and x1<l and x2<l: for i in ran
2021-11-02 11:46:21
324
原创 蓝桥杯BASIC-25回形取数——python
m,n=map(int,input().split()) l1=[] tmp1=0 #标记方向 tmp2=0 #标记圈数 tmp3=0 #防止重复输出拐角 if m<n: num=m*2 else: num=n*2-1 for i in range(m): l1.append(input().split()) for i in range(0,num): #带初始一共拐多少次
2021-11-02 11:02:10
118
原创 蓝桥杯BASIC-26报时助手——python
先判断小时再判断分钟 h,m=map(int,input().split()) dic={0:"zero", 1: "one", 2:"two", 3:"three", 4:"four", 5:"five", 6:"six", 7:"seven", 8:"eight", 9:"nine", 10:"ten", 11:"eleven", 12:"twelve", 13:"thirteen", 14:"fourteen", 15:"fifteen", 16:"sixteen", 17:"seve
2021-11-02 09:58:45
151
原创 第十二届蓝桥杯砝码称重问题——python
方法一(O(n²)):从第一个开始计算,用l2辅助存储当前前i个砝码可以称的重量(q、q+i、abs(q-i)),每次加一个砝码带入计算更新l2、l3。(此方法会超时) n=int(input()) l1=list(map(int,input().split())) l2=[] l2.append(l1[0]) l3=[] for i in l1[1:]: for q in l2: if i not in l3:
2021-11-01 16:37:27
2288
2
原创 蓝桥杯练习题——Huffuman树Python
Huffuman树Huffman树在编码中有着广泛的应用。在这里,我们只关心Huffman树的构造过程。 给出一列数{pi}={p0, p1, …, pn-1},用这列数构造Huffman树的过程如下: 1. 找到{pi}中最小的两个数,设为pa和pb,将pa和pb从{pi}中删除掉,然后将它们的和加入到{pi}中。这个过程的费用记为pa + pb。 2. 重复步骤1,直到{pi}中只剩下一个数。 在上面的操作过程中,把所有的费用相加,就得到了构造Huffman树的总费用。 本题任务:
2021-11-01 12:08:11
261
原创 C语言宏定义易错题
#include <stdio.h>#define MAX(x,y) (x)>(y)?(x):(y)void main(){ int a=5,b=2,c=3,d=3,t; t=MAX(a+b,c+d)*10; printf("%d",t);}输出结果为7.原因: 宏定义并非函数,只是单纯地语言替换即 t = (a+b)>(c+d)?(a+b):(c+d)10因此前者大则输出前者,后者大则输出后者10...
2020-10-09 08:41:44
859
1
原创 数据结构——归并排序
王道书上的归并排序算法,有疑问的欢迎评论区交流!//归并排序#include<stdio.h>#include<stdlib.h>void Merge(int A[],int low,int mid,int high){ int i,j,k; int B[high]; for(int k=low;k<=high;k++){ B[k]==A[k]; //A中所有元素复制到辅助数组B中 } for(i=low,j=mid+1,k=i;i<=mid
2020-07-22 11:10:45
226
原创 数据结构——选择排序之简单选择排序、堆排序
//选择排序(简单选择排序、堆排序) #include<stdio.h>#include<stdlib.h> void swap(int &a,int &b){ int temp=a; a=b; b=temp;}void SelectSort(int A[],int n){//简单选择排序 for(int i=0;i<n-1;i++){//共i-1趟 int min=i; for(int j=i+1;j<n;j++){
2020-07-22 10:46:40
167
原创 数据结构——交换排序之冒泡排序、快速排序
//交换排序#include<stdio.h>#include<stdlib.h>void BubbleSort(int A[],int n){//冒泡排序 int i,temp,flag; for(i=0;i<n-1;i++){ //共n-1趟(一趟确定一位) flag=0; for(int j=n-1;j>i;j--){ if(A[j]<A[j-1]){ temp=A[j]; A[j]=A[j-1]; A[j-1
2020-07-22 00:11:57
140
原创 数据结构——插入排序(直接插入、折半插入、希尔排序)
#include<stdio.h>#include<stdlib.h>void InsertSort1(int A[],int n){//直接插入排序 /*注:A是函数参数,到了本函数中,A只是一个指针 (地址,系统在本函数运行时,是不知道a所表示的地址有多大的数据存储空间,这里只是告诉函数:一个数据存储空间首地址) 所以,sizoef(A)的结果是指针变量A占内存的大小,并非 A的长度 */ if(n==1){ printf("排序结果为%d",A[0]);
2020-07-19 13:08:05
287
原创 数据结构——二分查找
顺序表的相关操作参见https://blog.youkuaiyun.com/qq_40280704/article/details/105916485//二分查找#include <stdio.h>#include <stdlib.h>#define MaxSize 50 typedef struct{ int *elem; int MaxSize,TableLen; }SeqList; int Binary_Search(SeqList L,int key){ int
2020-07-16 12:39:14
92
原创 数据结构——线性表的顺序查找
//顺序查找#include <stdio.h>#include <stdlib.h>typedef struct{ //查找表的数据结构 int *elem; //元素存储空间基址,建表时按实际长度分配,0号单元留空 int length; //表长 }SSTable;int i;int search(SSTable ST,int key){ ST.elem[0]=key; //哨兵(表中无key时,return i=0) for(i=ST.lengt
2020-07-16 12:21:45
576
原创 数据结构——二叉排序树的创建、插入、查找(循环和递归)
#include <stdio.h>#include <stdlib.h>typedef struct BSTNode{ int data; struct BSTNode *lchild,*rchild;}BSTNode,*BiTree; BSTNode *BST_Search1(BiTree T,int key){ //查找值为key的结点(while循环) while(T!=NULL&&key!=T->data){ if(key<
2020-07-10 11:51:38
936
1
原创 数据结构——线索二叉树的线索化(中序、先序、后序)
//线索二叉树#include<stdio.h>#include<stdlib.h>typedef struct ThreadNode{int data;struct ThreadNode *lchild,*rchild;int ltag,rtag; //tag=0时,指向左子树或又子树,tag为1时,指向中序遍历序列的前驱或后继}ThreadNode,*ThreadTree;ThreadNode *pre=NULL; //定义全局变量pre,指向当前访问结点的
2020-07-07 17:56:38
699
原创 数据结构——二叉树的创建、遍历(先序、中序、后序、层次),以及求已知结点p的前驱、后继结点
//二叉树的创建、遍历以及求结点p的前驱、后继结点#include <stdio.h>#include <stdlib.h>typedef struct BiTNode{int data;struct BiTNode *lchild,*rchild;}BiTNode,*BiTree;BiTree CreateBTree(BiTree T, bool isRoot){//创建一个二叉树 -1代表空节点char ch;if (isRoot)printf(“Root:
2020-07-07 14:19:04
380
空空如也
做了一道leecode题(617题 合并二叉树),有一点不太明白
2021-09-21
TA创建的收藏夹 TA关注的收藏夹
TA关注的人