蓝桥杯学习记录10
一:测试练习
问题描述
平面上有两个矩形,它们的边平行于直角坐标系的X轴或Y轴。对于每个矩形,我们给出它的一对相对顶点的坐标,请你编程算出两个矩形的交的面积。
输入格式
输入仅包含两行,每行描述一个矩形。
在每行中,给出矩形的一对相对顶点的坐标,每个点的坐标都用两个绝对值不超过10^7的实数表示。
输出格式
输出仅包含一个实数,为交的面积,保留到小数后两位。
解题思路:
距形面积交解题思路:因为输入的是一对相对顶点的坐标,所以在两个矩形中的左下角与右上角的坐标已经得知,要想得知相交矩阵的面积则需要得知相交面积的左下角与右上角的坐标,左下角的坐标求法为:矩形1的横坐标的小值与矩形2的横坐标的小值比较得出较大的值,矩形1的纵坐标的小值与矩形2的纵坐标的小值比较得出较大的值。右下角的坐标求法为:矩形1的横坐标的大值与矩形2的横坐标的大值比较得出较小的值,矩形1的纵坐标的大值与矩形2的纵坐标的大值比较得出较小的值。最后判断右上角的坐标是否大于左下角的坐标,如果不成立则相交面积不存在,若存在,则可以利用坐标进行计算。
具体代码:
#include<iostream>
using namespace std;
int main(){
float x1,x2,x3,x4,y1,y2,y3,y4;
cin>>x1>>y1>>x2>>y2;
cin>>x3>>y3>>x4>>y4;
float X1,X2,Y1,Y2;
float s;
X1 = max(min(x1, x2), min(x3, x4));
Y1 = max(min(y1, y2), min(y3, y4));
X2 = min(max(x1, x2), max(x3, x4));
Y2 = min(max(y1, y2), max(y3, y4));
if(X1<X2&&Y1<Y2){
s=(X2-X1)*(Y2-Y1);
printf("%.21f",s);
}
else{
cout<<"0.00";
}
return 0;
}
视频学习:
https://www.bilibili.com/video/BV1jE411g76D?p=11
栈和递归视频讲解
学习总结:
1:栈(stack)一种特殊的数据结构,是一种满足一定约束的线性数据结构,其约束是:只允许在栈的一端插入或删除元素,这一端被称为栈顶,相对的,另一端为栈底。我们通常用top来指示栈顶的位置。
2:可以定义一个结构体在主函数前:
struct Stack{
int data[1000];
int top=-1;
void push (int x){
top++;
data[top]=x;
}
};
要进行判断栈溢出问题,如果出现溢出,则需要输出溢出的提示。
3:栈除了push和pop两个比较重要的操作,还有一个操作是获取当前栈顶的元素的值,我们只需要访问data[top]就可以了。
4:栈的性质体现:先进后出!!