一、覆盖点集
输入若干个点的坐标x, y,其中x, y 都是正整数。当输入0,0时表示输入结束。现要求输入完毕以后,输出一个长方形左下角和右上角的坐标。要求长方形区域覆盖所有输入点坐标。
算法思想:设置四个变量x1、x2、y1、y2分别代表正方形四个边,即左下角坐标为(x1,y1),右上角坐标为(x2,y2),输入坐标(a,b),将其与x1,x2,x3,x4进行比较,修改坐标保证满足要求
#include<iostream>
using namespace std;
int main(){
//初始化左下角,右下角坐标;
int x1 = 0, x2 = 0, y1 = 0, y2 = 0;
int a, b;
cin >> a >> b;
while(a != 0 && b != 0){
if(a > x2){
x2 = a;
}else if(a < x1){
x1 = a;
}
if(b > y2){
y2 = b;
}else if(b < y1){
y1 = b;
}
cin >> a >> b;
}
printf("左下角坐标为:%d,%d;/n右上角坐标为:%d,%d。", x1, y1, x2, y2);
return 0;
}
二、回文串
回文串可以被定义为形如 abccba,也可以是 a bc cb a。
(1) 使用递归思想,实现一个可以检测回文串的函数。
(2)不使用递归,使用栈来实现上述功能
算法思想:
(1) 递归检测回文串:
- 如果字符串的长度为0或1,它是回文串。
- 否则,检查字符串的最左边和最右边的字符是否相等,然后递归地检查去除最左和最右字符后的子串。
(2) 栈实现检测回文串:
- 使用栈将字母推入栈。
- 从左到右遍历字符串,将字母推入栈。
- 再次从左到右遍历字符串,与从栈中弹出的字符进行比较。如果任何字符不匹配,返回 false;否则,
返回 true。
#include<iostream>
#include<stack>
using namespace std;
string s;
//递归算法
bool judge1(int left, int right){
if(left >= right) return true;
if(s[left] != s[right]) return false;
judge1(left + 1, right - 1);
return true;
}
//非递归算法
bool judge2(string s){
stack<char> st;
for(char c : s){
st.push(c);
}
for(char c : s){
if(c != st.top()){
return false;
}
st.pop();
}
return true;
}