![](https://img-blog.csdnimg.cn/20190927151132530.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
算法小题
文章平均质量分 65
铖铖的花嫁
但愿日子干净,抬头遇见的都是柔情
展开
-
时间显示(第十二届蓝桥杯省赛第一场C++B/C/研究生组,第十二届蓝桥杯省赛第一场JAVAB/C/研究生组)
小蓝要和朋友合作开发一个时间显示的网站。在服务器上,朋友已经获取了当前的时间,用一个整数表示,值为从 1970 年 1 月 1 日 00:00:00 到当前时刻经过的毫秒数。现在,小蓝要在客户端显示出这个时间。小蓝不用显示出年月日,只需要显示出时分秒即可,毫秒也不用显示,直接舍去即可。给定一个用整数表示的时间,请将这个时间对应的时分秒输出。**输入格式**输入一行包含一个整数,表示时间。**输出格式**输出时分秒表示的当前时间,格式形如 HH:MM:SS,其中 HH 表示时,值为原创 2023-04-09 12:33:47 · 655 阅读 · 0 评论 -
砝码称重(第十二届蓝桥杯省赛第一场C++A/B/研究生组)
你有一架天平和 N 个砝码,这 N 个砝码重量依次是 $W_1$,$W_2$,⋅⋅⋅,$W_N$。请你计算一共可以称出多少种不同的**正整数**重量?注意砝码可以放在天平两边。**输入格式**输入的第一行包含一个整数 **N**。第二行包含 **N** 个整数:$W_1$,$W_2$,⋅⋅⋅,$W_N$。**输出格式**输出一个整数代表答案。**数据范围**对于 50% 的评测用例,1≤N≤15。对于所有评测用例,1≤N≤100,N 个砝码总重不超过 $10^5$。原创 2023-04-09 08:06:18 · 814 阅读 · 0 评论 -
错误票据(第四届蓝桥杯省赛C++A/B组,第四届蓝桥杯省赛JAVAA/B组)
某涉密单位下发了某种票据,并要在年终全部收回。每张票据有唯一的ID号。全年所有票据的ID号是连续的,但ID的开始数码是随机选定的。因为工作人员疏忽,在录入ID号的时候发生了一处错误,造成了某个ID断号,另外一个ID重号。你的任务是通过编程,找出断号的ID和重号的ID。假设断号不可能发生在最大和最小号。**输入格式**第一行包含整数 N,表示后面共有 N 行数据。接下来 N 行,每行包含空格分开的若干个(不大于100个)正整数(不大于100000),每个整数代表一个ID号。原创 2023-04-09 08:52:46 · 460 阅读 · 0 评论 -
买不到的数目 遍历法和公式推导法(第四届蓝桥杯省赛C++A组,第四届蓝桥杯省赛JAVAC组)
小明开了一家糖果店。他别出心裁:把水果糖包成4颗一包和7颗一包的两种。糖果不能拆包卖。小朋友来买糖的时候,他就用这两种包装来组合。当然有些糖果数目是无法组合出来的,比如要买 10 颗糖。你可以用计算机测试一下,在这种包装情况下,最大不能买到的数量是17。大于17的任何数字都可以用4和7组合出来。本题的要求就是在已知两个包装的数量时,求最大不能组合出的数字。**输入格式**两个正整数 n,m,表示每种包装中糖的颗数。**输出格式**一个正整数,表示最大不能买到的糖数原创 2023-04-09 11:12:31 · 485 阅读 · 0 评论 -
活动安排问题 动态规划、贪心算法C语言实现
问题描述 设有n个活动的集合E={1,2,…,n},其中每个活动都要求使用同一资源,如演讲会场等,而在同一时间内只有一个活动能使用这一资源。每个活动i都有一个要求使用该资源的起始时间si和一个结束时间fi,且si <fi 。如果选择了活动i,则它在半开时间区间[si, fi)内占用资源。 若区间[si, fi)与区间[sj, fj)不相交,则称活动i与活动j是相容的。也就是说,当si≥fj或sj≥fi时,活动i与活动j相容。活动安排问题就是要在所给的活动集合中选出最大的相容活动子集合。思路原创 2022-04-24 10:32:16 · 3951 阅读 · 0 评论 -
图像压缩 动态规划C语言实现
问题描述 图像的变位压缩存储格式将所给的像素点序列{p1,p2,…,pn},0≤pi≤255分割成m个连续段S1,S2,…,Sm。第i个像素段Si中(1≤i≤m),有l[i]个像素,且该段中每个像素都只用b[i]位表示。 由于,b[i]<=8,需要用3位表示b[i];如果限制1<=l[i]<=256,则需要用8位表示l[i]。因此,第i个像素段所需的存储空间为l[i]*b[i]+11位。11是header,用来标记每段的特征的。 按此格式存储像素序列{p1,p2,…,pn}原创 2022-04-23 21:17:44 · 3976 阅读 · 0 评论 -
多边形游戏 动态规划C语言实现
给出一个n个顶点的多边形,每个顶点是一个整数值, 每条边是运算符’+’或’*’,运算过程如下:将某个边断开,形成一条数值和符号组成的链;选择一条边及边连接的两个顶点v1,v2;用一个新的顶点代替上述边和顶点,其值为v1,v2经中间的运算符运算后得到得数;迭代操作,直至得出最终的运算结果。对于给定的多边形,计算得最高分。原创 2022-04-23 17:39:41 · 3847 阅读 · 0 评论 -
电路布线 联系友好城市的另一种动态规划C语言实现
在一块电路板的上、下2端分别有n个接线柱。根据电路设计,要求用导线(i,π(i))将上端接线柱与下端接线柱相连,如图所示。其中π(i)是{1,2,…,n}的一个排列。导线(i,π(i))称为该电路板上的第i条连线。对于任何1≤iπ(j)。电路布线问题要确定将哪些连线安排在第一层上,使得该层上有尽可能多的连线。有点类似与“友好城市”的解法,将问题转化为最长上升子序列。原创 2022-04-22 12:52:06 · 1352 阅读 · 0 评论 -
最大子段和C语言实现
C++代码实现方法有循环穷举法,分治法,前缀和法,动态规划法原创 2022-03-27 17:12:27 · 2363 阅读 · 0 评论 -
多种方法求解最长公共子序列问题(动态规划、二维动态数组+贪心+二分)
问题:给定2个序列X={x1,x2,…,xm}和Y={y1,y2,…,yn},找出X和Y的最长公共子序列。动态规划:这是一个经典的动态规划问题,很多人拿到题目想必第一反应都是动态规划。可以利用动态规划解决此问题,但是我们在此避开动态规划思想,采取类似于贪心算法的思想解决问题。贪心算法+二分算法+二维动态数组:我们知道,如果希望上升子序列尽可能的长,我们需要子序列的最后一个元素尽可能的小,这样下一个元素接上来才会更容易,长度才会更长。用一维动态数组n记录目前的最长子序列。原创 2022-03-15 20:28:08 · 1403 阅读 · 0 评论 -
归并排序原理及C语言实现
归并排序的基本思想是典型的分治,将无序数组分成几段之后进行合并,每次合并时完成排序,也就是说,每次合并之后的数组都是有序的。所以,经过最后的合并,整个数组都将成为有序数组 。 分治的道理并不难懂,经典归并排序的细节主要在并这一方面。我们截取其中一次循环说明。因为每次合并之后数组会有序,所以下面例子中的图的红蓝部分都是局部有序的。 话不多说,直接上代码#include<bits/stdc++.h>using namespace std;//Two-way mergingin原创 2022-02-27 10:58:31 · 511 阅读 · 0 评论 -
快速排序优化算法原理及C语言实现
经典快排 快速排序(quicksort)的主要思想是分治,意为分而治之。其算法整体思路如下图 以升序排序为例,个人认为经典的快速排序算法的主要思想为:在每次排序后,中轴数(pivot)位置前的数都小于中轴数,其位置后的数都大于中轴数。所以每轮快速排序的步骤可以分为: 1、确认中轴数 2、寻找中轴数应该出现的位置 3、对中轴数前后的数分别进行快速排序优化算法 我们这次的优化主要针对中轴点的选取。 我们知道,快速排序的中轴数的选取原创 2022-02-26 12:18:53 · 965 阅读 · 0 评论 -
Ackerman(阿克曼)函数C语言递归实现
这段时间老师在课提到递归算法的一些应用,我对其中的Ackerman函数比较感兴趣,并尝试探索了一番。 Ackerman函数A(n,m)定义如下(可能跟网上的一些定义有出入): 根据定义,我们知道这是一个非常典型的递归问题,直接上代码解决问题:#include<bits/stdc++.h原创 2022-03-06 20:57:43 · 7016 阅读 · 0 评论