
程序设计与算法
文章平均质量分 64
乔卿
寻找灵感而不是寻找答案。
展开
-
计算机算法:贪心算法的概念、设计思路与经典问题(详细分析与总结)
求解最优化问题的算法通常需要经过一系列的步骤,在每个步骤都面临多种选择。对于许多最优化问题,使用动态规划算法来求最优解有些杀鸡用牛刀了,可以使用更简单、更高效的算法。贪心算法(greedy algorithm)就是这样的算法,它在每一步都做出当时看起来最佳的选择。也就是说,它。原创 2022-09-26 12:38:10 · 1842 阅读 · 0 评论 -
计算机算法:动态规划的概念、核心要素与经典问题(详细分析与总结)
动态规划方法通常用来求解最优化问题(optimization problem)。这类问题可以有很多可解,每个解都有一个值,我们希望寻找具有最优值(最小值或最大值)的解。我们称这样的解为问题的一个最优解(an optimal solution),而不是最优解(the optimal solution),因为可能有多个解都达到最优值。动态规划适用于子问题重叠的情况,也就是不同的子问题存在公共的子子问题。原创 2022-09-26 12:22:49 · 1953 阅读 · 0 评论 -
PAT乙级真题:C++:数字黑洞
题目描述给定任一个各位数字不完全相同的4位正整数,如果我们先把4个数字按非递增排序,再按非递减排序,然后用第1个数字减第2个数字,将得到一个新的数字。一直重复这样做,我们很快会停在有“数字黑洞”之称的6174,这个神奇的数字也叫Kaprekar常数。例如,我们从6767开始,将得到7766 - 6677 = 10899810 - 0189 = 96219621 - 1269 = 83528532 - 2358 = 61747641 - 1467 = 6174… …现给定任意4位正整数,请编原创 2020-11-21 16:29:44 · 343 阅读 · 0 评论 -
PAT乙级真题:C++:锤子剪刀布
题目描述大家应该都会玩“锤子剪刀布”的游戏:现给出两人的交锋记录,请统计双方的胜、平、负次数,并且给出双方分别出什么手势的胜算最大。输入描述输入第1行给出正整数N(<=105),即双方交锋的次数。随后N行,每行给出一次交锋的信息,即甲、乙双方同时给出的的手势。C代表“锤子”、J代表“剪刀”、B代表“布”,第1个字母代表甲方,第2个代表乙方,中间有1个空格。输入例子10C JJ BC BB BB CC CC BJ BB CJ J输出例子5 3 22 3 5B B原创 2020-11-21 10:18:06 · 317 阅读 · 0 评论 -
第二届全国大学生算法设计与编程挑战赛-I-小x的好路-road
Description小x是一个热爱生活的人。小x想要进行一次爽快的旅行,借此刺激隔壁国庆只放四天的同学。热爱生活的小x想去体验「抬首仰望,山上苍松茂密,层层叠叠、黛绿如墨,峰峦跌宕如风起云涌,松涛阵阵似万马奔腾。俯瞰山下,其绝美意境如一帘油画尽收眼底。那蜿蜒崎岖的九曲河水,如蛟龙过境迂回向前。」没错,是「九曲十八弯」!但焕星的「九曲十八弯」非常大,可以简化为一个具有 n 个点的完全图,由于小x的旅行路线不同常人,路的方向并不会限制到小x的行动,他只喜欢按照自己的心情来游览这个图。下面是一些注意事原创 2020-11-16 15:06:12 · 652 阅读 · 0 评论 -
第二届全国大学生算法设计与编程挑战赛-H-最大化-max
Description有一张N个点的无向图,要求给每个点分配一个标号,使得任意一条边两端的点的标号差(绝对值)不能超过给出的常数D,要求在此基础上最大化标号的最大值减最小值。如果答案为+∞,则输出 -1。Input第一行两个数字n,D。接下来n行,每行n个数字,第i行j列的数字等于1,表示存在一条从i到j的无向边。也就输图的邻接矩阵。Output一行一个数字,表示答案。Sample Input 15 5760 1 1 0 01 0 0 0 01 0 0 0 00 0 0 0 10原创 2020-11-16 14:58:49 · 909 阅读 · 3 评论 -
第二届全国大学生算法设计与编程挑战赛-D-兰德索尔杯-cup
Description半年一度的兰德索尔杯开幕了!「兰德索尔杯」是一个趣味跑步比赛。参加比赛的成员四人一组,在不同的赛道上进行跑步。下图就是跑步的一个场景:可以看到,跑道上充满了一些特殊物件:加速阵、障碍物、魔物等等。这使得比赛充满了乐趣(你看她们玩的多开心啊)在这道题目中,为了简化起见,我们可以认为每个人的跑步速度相同(其实本来就如此),且将跑道看作是一个长度为n的字符串。字符串上的每个位置代表了1m的距离。不同的字符分别代表不同的地形:'.':代表平地,正常情况下,在平地上跑步速度1m/s原创 2020-11-16 11:15:21 · 1008 阅读 · 0 评论 -
第二届全国大学生算法设计与编程挑战赛-B-数位dp-dp
Description小x对数位dp很感兴趣,现在他在解决一道题目,要求求解出[x,y]闭区间内所有满足以下性质的数字个数:相邻位数字差值的绝对值不能超过77。且最低位与最高位差值的绝对值要大于22。现在,给出x=13930,y=457439。x=13930,y=457439。请你告诉小x,满足要求的数字个数。注意,这是一道提交答案题,提交时只需将问题答案输出即可。Input无Output注意,这是一道提交答案题,提交时只需将问题答案输出即可。代码签到题。算完之后直接输出即可。#原创 2020-11-16 11:09:53 · 586 阅读 · 2 评论 -
C++程序设计:最大的子序列价值之和
题目描述给定一个长度为n的整数数列a1,a2,…,an,将这个数列分成若干段连续子序列,并且使得这些连续子序列的价值之和最大。我们定义一个连续子序列的价值为:这个子序列中最大值与最小值的差。输入格式第一行包括一个整数n,代表数列长度。第二行n个整数,其中第i个整数代表数列的第i个元素ai,相邻的数字之间以一个空格分隔。输出格式一个整数,表示所有的划分方案中,子序列价值之和的最大值。输入输出样例输入151 2 3 1 2输出13输入233 3 3输出20题解这是一道典型原创 2020-11-16 10:43:03 · 1033 阅读 · 0 评论 -
C++程序设计:最少的区间操作次数
题目描述给定一个长度为n的数列a1,a2,…,an,每次可以选择一个区间[l,r],使得这个区间内的数都加1或者都减1。请问至少需要多少次操作才能使数列中的所有数都相等?在保证最少次数的前提下,最后的情况有多少种?输入格式第一行一个正整数n。接下来n行,每行1个整数,第i+1行的整数代表ai。输出格式两行,每行一个整数。第一个整数代表最少操作次数。第二个整数代表最终会得到多少种结果。输入输出样例输入41122输出12数据规模说明1<=n<=105,0&l原创 2020-11-16 10:36:27 · 3930 阅读 · 0 评论 -
C语言:ASCII字符文件与二进制字符文件的相互转换
目录实验要求设计方法producer.cconsumer.c实验要求设计一个名为producer.c的程序,该程序读取文本文件(包含 ASCII字符的文件),并使用0和1将所有字符编码为二进制字符。设计一个名为consumer.c的程序,它将读取二进制文件,并将二进制文件的内容转换为 ASCII 字符序列。使用操作系统工具(如diff)检查原始文本文件和程序生成的文件是否相同。如果您不熟悉diff 命令,您可以在命令行中键入 man diff。 man 命令返回其后的Linux 命令的语法和语义。原创 2020-10-18 19:01:26 · 6447 阅读 · 0 评论 -
超级码力在线编程大赛初赛第1场-4-对称前后缀题解
目录题目描述示例输入输出说明题解代码题目描述给定一个字符串s。 我们令一个字符串的权值为一个字符串的最长对称前后缀长度。 请求出s的所有子串的权值的总和。 例如,“abcxyzcba” 的最长对称前后缀的长度为3,因为 “abc” 和 “cba” 对称。字符串的长度为n,1<=n<=3*1e3。 字符串均由小写英文字符组成。示例输入“bacbdab”输出12说明样例中,单个字符的子串的权值为1,它们的和为7。 另外的权值为: “bacb” -> 1,“bacbdab”原创 2020-08-30 20:06:08 · 402 阅读 · 0 评论 -
超级码力在线编程大赛初赛第1场-2-正三角形拼接题解
目录题目描述示例输入输出说明题解代码题目描述给出n根木棍,每次切割可以将1根木棍切成2段。 请计算出最少切割几次,可以从所有木棍中选出3根,组成一个正三角形。一开始的木棍根数为n,3<=n<=1000。 所有木棍的长度为一个整型数组lengths[],1<=lengths[i]<=1e9。切割必须要将木棍分成2根整数长度的木棍,而且总长度要和原木棍相等。题目数据保证有解。示例输入[2,3,7,5]输出2说明可以从长为7的木棍中,切出2根长为3的木棍,那么木棍的长原创 2020-08-29 20:26:00 · 747 阅读 · 0 评论 -
超级码力在线编程大赛初赛第1场-1-树木规划题解
目录题目描述示例输入输出说明分析代码动规贪心题目描述在一条直的马路上,有n棵树,每棵树有一个坐标,代表它们距离马路起点的距离。 如果每相邻的两棵树之间的间隔不小于d,那么我们认为这些树是美观的。 请计算出最少移除多少棵树,可以让这些树变得美观。树木的棵树为n,1<=n<=1e5。 树木的坐标用trees[]表示,0<=trees[i]<=1e9。最小美观间隔为d,1<=d<=1e9。保证输入的坐标是排好序的,且两两不相同。示例输入[1,2,3,5,6]2原创 2020-08-29 19:48:27 · 1861 阅读 · 0 评论 -
数据结构:参数化循环链表的C++实现(实现异常捕获)
题目描述:Create in C ++, a parametric class MyCircularList <T>. The objects of MyCircularList <T> are sets of objects of type (class) Node <T>, each node pointing to the next one and to the previous one. In a circular list the next node at原创 2020-06-21 10:20:05 · 280 阅读 · 0 评论 -
C++面向对象程序设计:银行储蓄管理系统
题目描述:设计一个银行储蓄管理系统,以菜单方式工作。功能需求:(1)设计一个账户类Account,包括户名、密码、电话、余额等信息。(2)为新用户开户。(3)为老用户销户、挂失。(4)可以办理存取款操作。(5)可以查询每笔历史交易记录。程序设计:#include<iostream>>#include <string>using namespace std;class Bank;void menu(Bank &);..原创 2020-06-04 22:17:28 · 18447 阅读 · 24 评论 -
C++面向对象程序设计:地铁自动售票系统
题目描述:地铁是当今城市较为流行的一种铁路运输的形式,地铁能避免城市地面拥挤,充分利用空间,具有运量大、准时、正点率较其他公交高、速度快等优点。请设计一个简易的、带菜单的地铁自动售票机系统。功能需求:(1)设计一个地铁路线类Router,包含路线编号,途中的各个站点。(2)设计一个地图类Map,可以显示所有可以乘坐的地铁站名,以及线路信息。(3)根据用户输入的起点和终点和人次信息,可以自动计算应付金额;根据用户输入的金额,计算找零信息。程序设计:#include <.原创 2020-06-04 22:17:54 · 9381 阅读 · 15 评论 -
经典非对称加密算法:RSA算法原理、实现详解(C++、Java)
目录零、实验要求参数说明一、RSA算法原理介绍二、实验步骤(含实验方法与关键代码)三、总结零、实验要求利用C++或Java实现RSA算法,要求使用面向对象的方法,分别实现文件的加密和解密方法。加密方法格式为:void encrypt(String file,String destFile){…}解密方法格式为:void decode( String file,String destFi...原创 2020-03-16 18:38:39 · 4662 阅读 · 17 评论 -
【看这一篇就够了】递归与汉诺塔问题(Hanoi)的超详细算法详解
现有这样一个问题:上帝创造了三根柱子,并在第一根柱子上按顺序套有N个大小不同的圆盘(自下而上,圆盘由大到小,呈金字形)。规定每次只能移动最顶端的一个圆盘,并且保证整个过程中大圆盘不能放在小圆盘之上。欲将所有圆盘从第一根柱子移动到第三根柱子,试给出解决方案。将三个柱子分别记为A,B,C,原问题可简化为:将N个大小不同的圆盘由A移动到C,每次只允许移动最顶端的单个圆盘,同一柱子上不得打乱...原创 2020-08-06 00:13:47 · 10672 阅读 · 5 评论 -
C++:“求解阶乘之和 1! + 2! + 3! + ... + n!” 算法、实现与性能优化
题目描述:输入正整数n,编写代码实现由1至n的阶乘之和的求算。分析题目,我们只要实现一个函数用于返回指定值的阶乘,通过for循环调用该函数并不断累加即可。对于求i的阶乘,只需一个for循环从1遍历到i,不断累乘即可。完整代码如下:#include <iostream>using namespace std;long long factorial(int n);i...原创 2018-06-18 01:09:13 · 23847 阅读 · 5 评论