【题解】围圈报数(约瑟夫问题)
【题目描述】
有n个人依次围成一圈,从第1个人开始报数,数到第m个人出列,然后从出列的下一个人开始报数,数到第m个热呢又出列,... ,如此反复到所有的人全部出列为止。设n个人的编号分别为1,2
,... , n,打印出列的顺序。
【输入描述】
一行,n和m。
【输出描述】
输出列的顺序
【样例输入】
4 17
【样例输出】
1 3 4 2
【数据结构】队列—基本操作
一、C++实例分析
C++队列queue模板类的定义在<queue>头文件中,queue 模板类需要两个模板参数,一个是元素类型,一个容器类型,元素类型是必要的,容器类型是可选的,默认为deque 类型。C++队列Queue是一种容器适配器,它给予程序员一种先进先出(FIFO)的数据结构。
那么我们如何判断队列是空队列还是已满呢?
a、栈空: 队首标志=队尾标志时,表示栈空。
b、栈满 : 队尾+1 = 队首时,表示栈满。
使用标准库的队列时, 应包含相关头文件,在栈中应包含头文件: #include< queue> 。定义:queue< int > q;
q.empty() 如果队列为空返回true,否则返回false q.size() 返回队列中元素的个数 q.pop() 删除队列首元素但不返回其值 q.front() 返回队首元素的值,但不删除该元素 q.push() 在队尾压入新元素 q.back() 返回队列尾元素的值,但不删除该元素
【数据结构】队列—基本概念
【报错】no space left on device compilation terminated
【数据结构】栈—括号匹配检验
【题目描述】
假设表达式中允许包含两种括号:圆括号和方括号,其嵌套的顺序随意,如([ ]())或[ ( [ ] [ ] ) ] 等为正确的匹配,[ ( ] )或 ([ ] ( )
或 ( ( ) ) )均为错误的匹配。
现在的问题是,要求检验一个给定的表示式中的括号是否正确匹配?
输入一个只包含圆括号和方括号的字符串,判断字符串中的括号是否匹配,匹配就输出“OK”,不匹配就 输出“wrong”。输入一个字符串:
[ ( [ ] [ ] ) ], 输出OK。
【输入描述】
输入仅一行字符(字符个数小于255)
【输出描述】
匹配就输出“OK”,不匹配就输出“wrong”
【样例输入】
[ ( ] )
【样例输出】
wrong
【数据结构】栈—表达式括号匹配
【题目描述】
假设一个表达式有英文字母(小写)、运算符(+,—,*,/)和左右小(圆)括号构成,以“@”作为表达式的结束符。请编写一个程序检查表达式中的左右圆括号是否匹配,若匹配,则返回“YES”;否则返回“NO”。表达式长度小于255,左圆括号少于20个。
【输入描述】
一行数据,即表达式。
【输出描述】
一行,即“YES” 或“NO”。
【样例输入】
2*(x+y)/(1-x)@
【样例输出】
YES
【数据结构】栈的基本操作
【数据结构】栈(Stack)的介绍
【贪心】最大子矩阵
【题目描述】
已知矩阵的大小定义为矩阵中所有元素的和。给定一个矩阵,你的任务是找到最大的非空(大小至少是1X1)子矩阵。
比如,如下4 x 4的矩阵
0 -2 -7 0
9 2 -6 2
-4 1 4 1
-1 8 0 -2
的最大子矩阵是
9 2
-4 1
-1 8
这个子矩阵的大小是15。
【输入描述】
输入是一个N x N。再后面的若干行中,依次(首先从左到右给出第一行的N个整数,再从左到右给出第二行的N个整数...)给出矩阵中的N2个整数,整数之间由空白字符分隔(空格或者空行)。已知矩阵中整数的范围都在[-127,127]。
【输出描述】
最大子矩阵的大小
【样例输入】
4 0 -2 -7 0 9 2 -6 2 -4 1 -4 1 -1 8 0 -2
【样例输出】
15