
算法笔记
文章平均质量分 50
日常学习过程积累
kangaroo萧筱
这个作者很懒,什么都没留下…
展开
-
问题 E: 约瑟夫问题再优化详细过程
题目描述n个人排成一圈,按顺时针方向依次编号1,2,3…n。从编号为1的人开始顺时针"一二三…"报数,报到m的人退出圈子。这样不断循环下去,圈子里的人将不断减少。最终一定会剩下一个人。试问最后剩下的人的编号。本题的数据规模更具有挑战性,尝试更通用且高效的算法。输入不超过1000组数据。每组数据一行,每行两个正整数,代表人数n (1 <= n < 231)和m(1<=m<=1000)。输出每组输入数据输出一行, 仅包含一个整数,代表最后剩下的人的编号。样例输入 Copy原创 2020-06-19 19:59:27 · 1750 阅读 · 1 评论 -
24点游戏(Ⅰ)
题目描述24点游戏的玩法是这样的:任取一幅牌中的 4张牌(不含大小王),每张牌上有数字(其中A 代表1,J 代表11,Q 代表 12,K代表13),你可以利用数学中的加、减、乘、除以及括号想办法得到24,每张牌只能用一次。例如有四张6,那么6+6+6+6=24,也可以6*6-6-6=24。但是有些牌是无法得到24的,比如两张 A 和两张2。读入表达式树的先序遍历字符串, 这里的表达式树是来自24点游戏的真实场景,也就是对应四个数字(值在1到13之间)组成的表达式,问该表达式树能不能得到24?输入输入原创 2020-06-19 09:45:12 · 2896 阅读 · 0 评论 -
表达式树的值
题目描述读入表达式树的先序遍历字符串,求其值。运算符只可能是加减乘除,保证输入的每个子表达式树的结果都是整数值且可以用C语言的int类型表达。输入输入由多组测试数据组成。每组数据包含一行字符串,即表达式树的先序遍历序列,字符串长度大于0且不超过100。输出见样例。样例输入 Copy| + 13 # # * 5 # # 9 # #| * + 13 # # 5 # # 9 # #样例输出 Copy(13+(5*9))=58((13+5)*9)=162#include<bits原创 2020-06-18 16:53:05 · 1169 阅读 · 0 评论 -
表达式树的创建与输出
题目描述编一个程序,读入先序遍历字符串,根据此字符串建立一棵二叉树(以指针方式存储),请注意的是,我们保证该树一定是表达式树(见教材5.2 5.8)。例如下面的先序遍历字符串:13 # # * 5 # # 9 # #运算符只可能是加减乘除,数值为小于等于100,各结点用空格分开,其中“#”代表空树。建立起此二叉树以后,再按要求输出二叉树。输入输入由多组测试数据组成。每组数据包含一行字符串,即表达式树的先序遍历序列,字符串长度大于0且不超过100。输出对于每组数据,输出一行,内容是该原创 2020-06-18 16:52:56 · 2982 阅读 · 0 评论 -
中缀表达式转后缀表达式
题目描述输入一个中缀表达式,编程输出其后缀表达式,要求输出的后缀表达式的运算次序与输入的中缀表达式的运算次序相一致。为简单起见,假设输入的中缀表达式由+(加)、-(减)、×(乘)、/(除)四个运算符号以及左右圆括号和英文字母组成,其中算术运算符遵守先乘除后加减的运算规则。假设输入的中缀表达式长度不超过300个字符,且都是正确的,即没有语法错误,并且凡出现括号其内部一定有表达式,即内部至少有一个运算符号。中缀表达式转后缀表达式的方法:1.遇到操作数:直接输出(添加到后缀表达式中)2.栈为空时,遇到运算原创 2020-06-18 16:52:00 · 764 阅读 · 1 评论 -
单词检查(Ⅱ)- 二叉排序树实现
题目描述许多应用程序,如字处理软件,邮件客户端等,都包含了单词检查特性。单词检查是根据字典,找出输入文本中拼错的单词,我们认为凡是不出现在字典中的单词都是错误单词。不仅如此,一些检查程序还能给出类似拼错单词的修改建议单词。 例如字典由下面几个单词组成:bake cake main rain vase如果输入文件中有词vake ,检查程序就能发现其是一个错误的单词,并且给出 bake, cake或vase做为修改建议单词。修改建议单词可以采用如下生成技术:(1)在每一个可能位置插入‘a-‘z’中的一原创 2020-06-18 16:51:40 · 6017 阅读 · 0 评论 -
单词检查(Ⅰ)- 顺序表实现
题目描述许多应用程序,如字处理软件,邮件客户端等,都包含了单词检查特性。单词检查是根据字典,找出输入文本中拼错的单词,我们认为凡是不出现在字典中的单词都是错误单词。不仅如此,一些检查程序还能给出类似拼错单词的修改建议单词。 例如字典由下面几个单词组成:bake cake main rain vase如果输入文件中有词vake ,检查程序就能发现其是一个错误的单词,并且给出 bake, cake或vase做为修改建议单词。修改建议单词可以采用如下生成技术:(1)在每一个可能位置插入‘a-‘z’中的一原创 2020-06-18 16:51:23 · 5184 阅读 · 4 评论 -
后缀表达式求值
题目描述为了便于处理表达式,常常将普通表达式(称为中缀表示)转换为后缀{运算符在后,如X/Y写为XY/表达式。在这样的表示中可以不用括号即可确定求值的顺序,如:(P+Q)(R-S) → PQ+RS-。后缀表达式的处理过程如下:扫描后缀表达式,凡遇操作数则将之压进堆栈,遇运算符则从堆栈中弹出两个操作数进行该运算,将运算结果压栈,然后继续扫描,直到后缀表达式被扫描完毕为止,此时栈底元素即为该后缀表达式的值。输入输入一行表示后缀表达式,数与数之间一定有空格隔开(可能不只一个空格),最后输入@表示输入结束。原创 2020-06-18 16:52:16 · 1275 阅读 · 0 评论 -
二叉树的创建和文本显示
题目描述编一个程序,读入先序遍历字符串,根据此字符串建立一棵二叉树(以指针方式存储)。例如如下的先序遍历字符串:A ST C # # D 10 # G # # F # # #各结点数据(长度不超过3),用空格分开,其中“#”代表空树。建立起此二叉树以后,再按要求输出二叉树。输入输入由多组测试数据组成。每组数据包含一行字符串,即二叉树的先序遍历,字符串长度大于0且不超过100。输出对于每组数据,显示对应的二叉树,然后再输出一空行。输出形式相当于常规树形左旋90度。见样例。 注意二叉树的每一原创 2020-06-18 16:53:29 · 1880 阅读 · 0 评论 -
约瑟夫问题(1,2,1,2报数)
题目描述n个人排成一圈,按顺时针方向依次编号1,2,3…n。从编号为1的人开始顺时针"一二"报数,报到2的人退出圈子。这样不断循环下去,圈子里的人将不断减少。最终一定会剩下一个人。试问最后剩下的人的编号。n很大,直接模拟题意不行,请找出规律。输入不超过1000组数据。每组数据一行,每行一个正整数,代表人数n。 (1 <= n < 231)输出每组输入数据输出一行, 仅包含一个整数,代表最后剩下的人的编号。样例输入 Copy72样例输出 Copy71找规律1,1,3,原创 2020-06-18 16:50:19 · 3197 阅读 · 1 评论 -
用数组求两集合的交集
题目描述有两个相等长度的正整数序列A和B,都是有序的(递增排序),同时一个序列中没有重复元素,现在需要求这两个序列的交――序列C,同时打印输出。输入输入由多组测试用例组成。每个测试用例一共有2n+1行,第一行输入为数列的长度n,然后下面2n+1行,依次输入序列A中的数。n+22n+1行,依次输入序列B中的数。其中 1 <= n <= 50000 , 序列中每个数大小不会超过1000000。当程序输入n为0时表示结束。输出每个测试用例输出一行,先输出序列C的长度,然后依次输出C中的整原创 2020-06-16 09:53:23 · 834 阅读 · 1 评论 -
数据结构:各大排序算法整理
1.直接排序法21,25,49,25*,16,08(*表示后一个25)直接排序法动态图排序完毕。直接插入排序算法:void InsertSort(SqList &L){ int i,j; for(i=2;i<=L.length;++i) if( L.r[i].key<L.r[i-1].key) //将L.r[i]插入有序子表 { L.r[0]=L.r[i]; // 复制为哨兵原创 2020-06-12 21:23:36 · 1565 阅读 · 0 评论 -
C语言选择排序法
C语言选择排序法#include<stdio.h>void main()//主函数{int a[10];int i,j,w;printf(“请输入10个数字: \n”);for(i=0;i<10;i++)scanf("%d",&a[i]);for(i=0;i<10;i++){for(j=i+1;j<10;j++)if(a[i]<a...原创 2020-01-18 20:43:52 · 556 阅读 · 0 评论