数据结构和算法
数据结构与算法
没有金刚钻,也木有刷子
个人学习记录而已,主要供自己查看,如有不当请见谅。
展开
-
C++里int和string的转换
#include<string>#include<sstream>usingnamespacestd;int StringToInt(string &str){ return atoi(str.c_str());}string IntToString(int &a){ stringstream ss; ss<<a; return ss.str(); }voidmain(){//i...原创 2021-06-10 10:41:26 · 428 阅读 · 0 评论 -
字符串升序
#include<iostream>#include<string>using namespace std;void string_upper(string a, string b, string c){ if (b > c) { string temp = b; b = c; c = temp; } if (a < b) cout << a << " "<<b <<.原创 2021-04-20 09:08:31 · 534 阅读 · 0 评论 -
将整数改成字符串
#include<iostream>#include<cmath>using namespace std;void convert(int n){ int i; char c; if ((i = n / 10)!=0) { convert(i); } c = n % 10 + '0'; cout << " " << c;}int main(){ int m; cin >> m; if (.原创 2021-04-19 17:01:33 · 121 阅读 · 0 评论 -
汉诺塔
#include<iostream>#include<cmath>using namespace std;//汉诺塔void move(char x,char y){ cout << x << "-->" << y << endl;}void hanoi(int n, char a1, char b1, char c1)//将n个盘子从a1借助b1移到c1{ if (n == 1) move(a1, c.原创 2021-04-19 16:50:06 · 35 阅读 · 0 评论 -
求一元二次方程的根
#include<iostream>#include<cmath>using namespace std;float x1, x2, disc, p, q;void greater_than_zero(float a, float b){ x1 = (-b + sqrt(disc)) / (2 * a); x2 = (-b - sqrt(disc)) / (2 * a);}void equal_than_zero(float a, float b){ .原创 2021-04-19 16:42:52 · 75 阅读 · 0 评论 -
吃糖果
题目描述名名的妈妈从外地出差回来,带了一盒好吃又精美的巧克力给名名(盒内共有 N 块巧克力,20 > N >0)。 妈妈告诉名名每天可以吃一块或者两块巧克力。 假设名名每天都吃巧克力,问名名共有多少种不同的吃完巧克力的方案。 例如: 如果N=1,则名名第1天就吃掉它,共有1种方案; 如果N=2,则名名可以第1天吃1块,第2天吃1块,也可以第1天吃2块,共有2种方案; 如果N=3,则名名第1天可以吃1块,剩2块,也可以第1天吃2块剩1块,所以名名共有2+1=3种方案; 如果N=4,则名名可以第原创 2021-04-09 19:21:18 · 82 阅读 · 0 评论 -
进制转换
题目描述将一个长度最多为30位数字的十进制非负整数转换为二进制数输出。输入描述:多组数据,每行为一个长度不超过30位的十进制非负整数。(注意是10进制数字的个数可能有30个,而非30bits的整数)输出描述:每行输出对应的二进制数。示例1输入0138输出01111000#include<iostream>#include<string>#include<vector>#include<al原创 2021-04-09 18:16:00 · 49 阅读 · 0 评论 -
大整数的因子
题目描述已知正整数k满足2<=k<=9,现给出长度最大为30位的十进制非负整数c,求所有能整除c的k.输入描述:若干个非负整数c,c的位数<=30每行一个c输出描述:每一个c的结果占一行1) 若存在满足 c%k == 0 的k,输出所有这样的k,中间用空格隔开,最后一个k后面没有空格。2) 若没有这样的k则输出"none"注意整数溢出问题不要对-1进行计算示例1输入307213-1输出2 3 5 62 3 4 6 8 9原创 2021-04-06 11:43:13 · 124 阅读 · 0 评论 -
最简真分数
题目描述给出n个正整数,任取两个数分别作为分子和分母组成最简真分数,编程求共有几个这样的组合。输入描述:每组包含n(n<=600)和n个不同的整数,整数大于1且小于等于1000。输出描述:每行输出最简真分数组合的个数。示例1输入73 5 7 9 11 13 153 2 4 50输出17 2//方法一#include<iostream>#include<algorithm>using namespace s原创 2021-04-05 20:28:22 · 780 阅读 · 0 评论 -
10进制VS2进制
题目描述 对于一个十进制数A,将A转换为二进制数,然后按位逆序排列,再转换为十进制数B,我们称B为A的二进制逆序数。 例如对于十进制数173,它的二进制形式为10101101,逆序排列得到10110101,其十进制数为181,181即为173的二进制逆序数。输入描述: 一个1000位(即10^999)以内的十进制数。输出描述: 输入的十进制数的二进制逆序数。示例1输入173输出181#include<iostream&...原创 2021-04-05 16:11:27 · 135 阅读 · 0 评论 -
最大序列和
题目描述给出一个整数序列S,其中有N个数,定义其中一个非空连续子序列T中所有数的和为T的“序列和”。 对于S的所有非空连续子序列T,求最大的序列和。 变量条件:N为正整数,N≤1000000,结果序列和在范围(-2^63,2^63-1)以内。输入描述:第一行为一个正整数N,第二行为N个整数,表示序列中的数。输出描述:输入可能包括多组数据,对于每一组输入数据,仅输出一个数,表示最大序列和。示例1输入51 5 -3 2 461 -2 3 4 -10 64-3原创 2021-04-04 19:22:39 · 52 阅读 · 0 评论 -
递推数列
题目描述给定a0,a1,以及an=p*a(n-1) + q*a(n-2)中的p,q。这里n >= 2。 求第k个数对10000的模。输入描述:输入包括5个整数:a0、a1、p、q、k。输出描述:第k个数a(k)对10000的模。示例1输入20 1 1 14 5输出8359#include<iostream>using namespace std;int main(){ int a0,a1,p,q,k; whil原创 2021-04-04 17:08:43 · 219 阅读 · 0 评论 -
今年的第几天?
题目描述输入年、月、日,计算该天是本年的第几天。输入描述:包括三个整数年(1<=Y<=3000)、月(1<=M<=12)、日(1<=D<=31)。输出描述:输入可能有多组测试数据,对于每一组测试数据,输出一个整数,代表Input中的年、月、日对应本年的第几天。示例1输入1990 9 202000 5 1输出263122思路:就是对年份的判断,判断是否为闰年;其次要知道闰年2月是29天!!!第一次未通过,把闰年2原创 2021-04-04 11:30:06 · 99 阅读 · 0 评论 -
最小邮票数
题目描述 有若干张邮票,要求从中选取最少的邮票张数凑成一个给定的总值。 如,有1分,3分,3分,3分,4分五张邮票,要求凑成10分,则使用3张邮票:3分、3分、4分即可。输入描述: 有多组数据,对于每组数据,首先是要求凑成的邮票总值M,M<100。然后是一个数N,N〈20,表示有N张邮票。接下来是N个正整数,分别表示这N张邮票的面值,且以升序排列。输出描述: 对于每组数据,能够凑成总值M的最少邮票张数。若无解,输出0。示例1输入10...原创 2021-04-03 19:47:30 · 81 阅读 · 0 评论 -
质因数的个数
题目描述求正整数N(N>1)的质因数的个数。 相同的质因数需要重复计算。如120=2*2*2*3*5,共有5个质因数。输入描述:可能有多组测试数据,每组测试数据的输入是一个正整数N,(1<N<10^9)。输出描述:对于每组数据,输出N的质因数的个数。示例1输入120输出5思路:思路我们求质因子的时候其实没有必要去先判断一个因子是否为质数,为什么呢?比如说一个因子为 11,是质数,那么无论前面怎么进行除法运算,一定有这个因子,原创 2021-04-03 15:52:40 · 712 阅读 · 0 评论 -
玛雅人的密码
题目描述玛雅人有一种密码,如果字符串中出现连续的2012四个数字就能解开密码。给一个长度为N的字符串,(2=<N<=13)该字符串中只含有0,1,2三种数字,问这个字符串要移位几次才能解开密码,每次只能移动相邻的两个数字。例如02120经过一次移位,可以得到20120,01220,02210,02102,其中20120符合要求,因此输出为1.如果无论移位多少次都解不开密码,输出-1。输入描述:输入包含多组测试数据,每组测试数据由两行组成。第一行为一个整数N,代表字符串的长度(2&原创 2021-03-31 18:10:17 · 101 阅读 · 0 评论 -
二叉树遍历
题目描述编一个程序,读入用户输入的一串先序遍历字符串,根据此字符串建立一个二叉树(以指针方式存储)。 例如如下的先序遍历字符串: ABC##DE#G##F### 其中“#”表示的是空格,空格字符代表空树。建立起此二叉树以后,再对二叉树进行中序遍历,输出遍历结果。输入描述:输入包括1行字符串,长度不超过100。输出描述:可能有多组测试数据,对于每组数据,输出将输入字符串建立二叉树后中序遍历的序列,每个字符后面都有一个空格。每个输出结果占一行。示例1输入abc##de#原创 2021-03-30 17:42:35 · 78 阅读 · 0 评论 -
球的半径和体积
题目描述输入球的中心点和球上某一点的坐标,计算球的半径和体积输入描述:球的中心点和球上某一点的坐标,以如下形式输入:x0 y0 z0 x1 y1 z1输出描述:输入可能有多组,对于每组输入,输出球的半径和体积,并且结果保留三位小数为避免精度问题,PI值请使用arccos(-1)。示例1输入0 0 0 1 1 1 输出1.732 21.766解题思路:该题考查的更多是float和double的精度问题吧1.float 为单精度,内存中占 4 个字原创 2021-03-30 14:07:14 · 147 阅读 · 0 评论 -
整数拆分
题目描述一个整数总可以拆分为2的幂的和,例如: 7=1+2+4 7=1+2+2+2 7=1+1+1+4 7=1+1+1+2+2 7=1+1+1+1+1+2 7=1+1+1+1+1+1+1 总共有六种不同的拆分方式。 再比如:4可以拆分成:4 = 4,4 = 1 + 1 + 1 + 1,4 = 2 + 2,4=1+1+2。 用f(n)表示n的不同拆分的种数,例如f(7)=6. 要求编写程序,读入n(不超过1000000),输出f(n)%1000000000。输入描述:每组输入包括一个整数:N(1原创 2021-03-28 20:25:26 · 249 阅读 · 0 评论 -
手机键盘
题目描述按照手机键盘输入字母的方式,计算所花费的时间 如:a,b,c都在“1”键上,输入a只需要按一次,输入c需要连续按三次。 如果连续两个字符不在同一个按键上,则可直接按,如:ad需要按两下,kz需要按6下 如果连续两字符在同一个按键上,则两个按键之间需要等一段时间,如ac,在按了a之后,需要等一会儿才能按c。 现在假设每按一次需要花费一个时间段,等待时间需要花费两个时间段。 现在给出一串字符,需要计算出它所需要花费的时间。输入描述:一个长度不大于100的字符串,其中只有手机按键上有的小写字原创 2021-03-28 18:24:11 · 77 阅读 · 0 评论 -
约数的个数
题目描述输入n个整数,依次输出每个数的约数的个数输入描述:输入的第一行为N,即数组的个数(N<=1000)接下来的1行包括N个整数,其中每个数的范围为(1<=Num<=1000000000)输出描述:可能有多组输入数据,对于每组输入数据,输出N行,其中每一行对应上面的一个数的约数的个数。示例1输入51 3 4 6 12输出12346算法思想:对于数 n,因为小于的数 i 如果能整除n,则必定还有一个大于的因数j,使得=..原创 2021-03-28 15:30:40 · 69 阅读 · 0 评论 -
成绩排序
题目描述查找和排序题目:输入任意(用户,成绩)序列,可以获得成绩从高到低或从低到高的排列,相同成绩都按先录入排列在前的规则处理。示例:jack70peter96Tom70smith67从高到低成绩peter96jack70Tom70smith67从低到高smith67jack 70Tom 70peter96输入描述:...原创 2021-03-28 15:04:36 · 235 阅读 · 0 评论 -
快速排序
static const auto io_sync_off = [](){ // turn off sync std::ios::sync_with_stdio(false); // untie in/out streams std::cin.tie(nullptr); return nullptr;}();class Solution {public: /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可.原创 2021-03-27 16:28:00 · 47 阅读 · 0 评论 -
static const auto io_sync_off = []()
牛客网上面的一些“奇怪”代码!!! static const auto io_sync_off = [](){ // turn off sync std::ios::sync_with_stdio(false); // untie in/out streams std::cin.tie(nullptr); return nullptr;}();这是c++11中的Lambda表达式,定义了一个静态函数io_sync_off,关于Lambda表达式的具体形...原创 2021-03-27 16:14:01 · 592 阅读 · 0 评论 -
反转链表
题目描述输入一个链表,反转链表后,输出新链表的表头。示例1输入{1,2,3}返回值{3,2,1}/*struct ListNode { int val; struct ListNode *next; ListNode(int x) : val(x), next(NULL) { }};*/class Solution {public: ListNode* ReverseList(ListNode* pHead) { ListNod原创 2021-03-27 14:04:16 · 90 阅读 · 0 评论 -
进制转换
题目描述将一个长度最多为30位数字的十进制非负整数转换为二进制数输出。输入描述:多组数据,每行为一个长度不超过30位的十进制非负整数。(注意是10进制数字的个数可能有30个,而非30bits的整数)输出描述:每行输出对应的二进制数。示例1输入0138输出01111000算法思想:128/2 我们得到64和余数0 ,所以我们得到的0就应该放在最低位,这时我们再把64/2,....以此类推知道被除数为0的时候就计算完成#includ.原创 2021-03-28 13:24:40 · 40 阅读 · 0 评论 -
判断链表中是否有环
题目描述判断给定的链表中是否有环。如果有环则返回true,否则返回false。你能给出空间复杂度o(1)的解法么?1.方法一:快慢指针慢指针针每次走一步,快指针每次走两步,如果相遇就说明有环,如果有一个为空说明没有环。/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), n原创 2021-03-27 19:14:38 · 127 阅读 · 0 评论 -
链表中的节点每k个一组翻转
题目描述将给出的链表中的节点每k个一组翻转,返回翻转后的链表如果链表中的节点数不是k的倍数,将最后剩下的节点保持原样你不能更改节点中的值,只能更改节点本身。要求空间复杂度O(1)例如:给定的链表是1→2→3→4→5对于k=2, 你应该返回2→1→4→3→5对于k=3, 你应该返回3→2→1→4→5示例1输入复制{1,2,3,4,5},2返回值复制{2,1,4,3,5}/** * struct ListNode { * i...原创 2021-03-27 19:10:18 · 103 阅读 · 0 评论 -
有趣的数 【南阳oj 题目85】
(原题链接)点击打开链接有趣的数时间限制:3000 ms | 内存限制:65535 KB难度:2描述把分数按下面的办法排成一个数表。1/1 1/2 1/3 1/4.....2/1 2/2 2/3....3/1 3/2 ....4/1..............我们以z字型方法给上表的每项编号。特定方法:第一项是1/1,然后是1/2、2原创 2017-08-12 17:11:11 · 305 阅读 · 0 评论 -
阶乘的0 【南阳 oj 题目84】
点击打开链接描述计算n!的十进制表示最后有多少个0输入第一行输入一个整数N表示测试数据的组数(1每组测试数据占一行,都只有一个整数M(0输出输出M的阶乘的十进制表示中最后0的个数比如5!=120则最后的0的个数为1样例输入63601001024234568735373样例输出0142425358612原创 2017-08-11 09:15:34 · 216 阅读 · 0 评论 -
独木舟上的旅行
独木舟上的旅行, 南阳oj 题目71描述 进行一次独木舟的旅行活动,独木舟可以在港口租到,并且之间没有区别。一条独木舟最多只能乘坐两个人,且乘客的总重量不能超过独木舟的最大承载量。我们要尽量减少这次活动中的花销,所以要找出可以安置所有旅客的最少的独木舟条数。现在请写一个程序,读入独木舟的最大承载量、旅客数目和每位旅客的重量。根据给出的规则,计算要安置所有旅客必须的最少的独原创 2017-08-10 20:00:11 · 287 阅读 · 0 评论 -
阶乘因式分解(二)【南阳oj 题目70】
点击打开链接描述给定两个数n,m,其中m是一个素数。将n(0注:^为求幂符号。 输入第一行是一个整数s(0随后的s行, 每行有两个整数n,m。 输出输出m的个数样例输入3100 516 21000000000 13样例输出241583333329题解:原创 2017-08-10 09:38:33 · 236 阅读 · 0 评论 -
数的长度【南阳 oj 题目69】
点击打开链接描述 N!阶乘是一个非常大的数,大家都知道计算公式是N!=N*(N-1)······*2*1.现在你的任务是计算出N!的位数有多少(十进制)?输入首行输入n,表示有多少组测试数据(n随后n行每行输入一组测试数据 N( 0 输出对于每个数N,输出N!的(十进制)位数。样例输入31332000样例输出1原创 2017-08-09 18:33:34 · 222 阅读 · 0 评论 -
三点顺序 【南阳 oj 题目68 】
点击打开链接描述现在给你不共线的三个点A,B,C的坐标,它们一定能组成一个三角形,现在让你判断A,B,C是顺时针给出的还是逆时针给出的?如:图1:顺时针给出图2:逆时针给出 输入每行是一组测试数据,有6个整数x1,y1,x2,y2,x3原创 2017-08-09 17:53:23 · 254 阅读 · 0 评论 -
三角形面积【南阳oj 题目67】
点击打开链接描述给你三个点,表示一个三角形的三个顶点,现你的任务是求出该三角形的面积输入每行是一组测试数据,有6个整数x1,y1,x2,y2,x3,y3分别表示三个点的横纵坐标。(坐标值都在0到10000之间)输入0 0 0 0 0 0表示输入结束测试数据不超过10000组输出输出这三个点所代表的三角形的面积,结果精确到小数点后1位(即使是整原创 2017-08-09 16:04:16 · 544 阅读 · 0 评论 -
分数拆分【南阳oj 题目66】
点击打开链接描述现在输入一个正整数k,找到所有的正整数x>=y,使得1/k=1/x+1/y.输入第一行输入一个整数n,代表有n组测试数据。接下来n行每行输入一个正整数k输出按顺序输出对应每行的k找到所有满足条件1/k=1/x+1/y的组合样例输入22 12样例输出1/2=1/6+1/31/2=1/4+1/41/12原创 2017-08-08 19:43:25 · 496 阅读 · 0 评论 -
HDU-Array
点击打开链接Vitaly has an array of n distinct integers. Vitaly wants to divide this array into three non-empty sets so as the following conditions hold:The product of all numbers in the first原创 2017-07-26 18:10:47 · 274 阅读 · 0 评论 -
EXCEL排序
点击打开链接每天第一个到机房的人要把门打开,最后一个离开的人要把门关好。现有一堆杂乱的机房签 到、签离记录,请根据记录找出当天开门和关门的人。 Input测试输入的第一行给出记录的总天数N ( > 0 )。下面列出了N天的记录。 每天的记录在第一行给出记录的条目数M ( > 0 ),下面是M行,每行的格式为 证件号码 签到时间 签离时间 其中原创 2017-07-23 17:44:18 · 290 阅读 · 0 评论 -
前m大的数
点击打开链接还记得Gardon给小希布置的那个作业么?(上次比赛的1005)其实小希已经找回了原来的那张数表,现在她想确认一下她的答案是否正确,但是整个的答案是很庞大的表,小希只想让你把答案中最大的M个数告诉她就可以了。 给定一个包含N(NInput输入可能包含多组数据,其中每组数据包括两行: 第一行两个数N和M, 第二行N个数,表示该序列。原创 2017-07-23 17:35:39 · 172 阅读 · 0 评论 -
开门人和关门人
点击打开链接每天第一个到机房的人要把门打开,最后一个离开的人要把门关好。现有一堆杂乱的机房签 到、签离记录,请根据记录找出当天开门和关门的人。 Input测试输入的第一行给出记录的总天数N ( > 0 )。下面列出了N天的记录。 每天的记录在第一行给出记录的条目数M ( > 0 ),下面是M行,每行的格式为 证件号码 签到时间 签离时间转载 2017-07-23 17:47:59 · 210 阅读 · 0 评论