4 条题解
-
1
#include <bits/stdc++.h> using namespace std; int main() { double x1,y1,x2,y2; double x3,y3,x4,y4; double m1,n1;//交集左上角坐标 double m2,n2;//交集右下角坐标 cin>>x1>>y1>>x2>>y2; cin>>x3>>y3>>x4>>y4; m1 = max(min(x1,x2),min(x3,x4)); n1 = max(min(y1,y2),min(y3,y4)); m2 = min(max(x1,x2),max(x3,x4)); n2 = min(max(y1,y2),max(y3,y4)); cout<<fixed<<setprecision(2); if(m2>m1 && n2>n1) cout<<(m2 - m1)*(n2 - n1); else cout<<0.0; return 0; }
-
1
保留 x 位小数
方法 1
- 头文件:
#include <cstdio>
- 语句:
printf("%.xf", a);
方法 2
- 头文件:
#include<iostream>
、#include<iomanip>
- 语句:
cout << fixed << setprecision(x) << a;
注意
如果题目说保留 位小数,那么就按照这种方式输出就可以了。
#include<iostream> #include<iomanip> using namespace std; int main() { double a=3.14159265857; cout << fixed << setprecision(x) << a; x代表具体要保留几位。 请务必自己多敲几遍代码,这个单词比较长避免考场出到原题自己单词忘了 }
#include<iostream> #include <cstdio> using namespace std; int main() { double a=3.14159265857; printf("%.xf", a); x代表具体要保留几位。 请务必自己多敲几遍代码,这个单词比较长避免考场出到原题自己单词忘了 }
- 头文件:
-
0
写成一坨
#include<bits/stdc++.h> using namespace std; int main() { double ax1,ax2,ay1,ay2,bx1,bx2,by1,by2; cin>>ax1>>ay1>>ax2>>ay2>>bx1>>by1>>bx2>>by2; double cx1=max(min(ax1,ax2),min(bx1,bx2)),cy1=max(min(ay1,ay2),min(by1,by2)),cx2=min(max(ax1,ax2),max(bx1,bx2)),cy2=min(max(ay1,ay2),max(by1,by2)); if (cx2>cx1&&cy2>cy1) cout<<fixed<<setprecision(2)<<(cx2-cx1)*(cy2-cy1); else cout<<"0.00"; return 0; }
-
0
针对这道题,我们可以由输入得到两个矩形的相对顶点的坐标
第一个矩形顶点坐标:(x1,y1)(x2,y2) 第二个:(x3,y3)(x4,y4)
想要求得它两相交的矩形的面积,我们只需要求出相交的矩形的相对顶点坐标(m1,n1)(m2,n2),如果m2-m1和n2-n1大于0,就代表有相交的矩形,我们直接输出(m2-m1)*(n2-n1),,其余的情况代表没有相交的矩形,直接输出0.00
x=m2-m1; y=n2-n1; if(x>0 && y>0) cout<<fixed<<setprecision(2)<<x*y; else cout<<fixed<<setprecision(2)<<0.00;
现在的问题就是(m1,n1)(m2,n2)怎么求
比如m1,他就是在x1,x2里面找较小的值,也在x3,x4找较小的值,在找的的值里面选取最大的值,就是我们的m1了(可以画图去试着理解一下)剩下的以此类推
m1 = max(min(x1,x2),min(x3,x4)); n1 = max(min(y1,y2),min(y3,y4)); m2 = min(max(x1,x2),max(x3,x4)); n2 = min(max(y1,y2),max(y3,y4));
- 1
信息
- ID
- 837
- 时间
- 1000ms
- 内存
- 512MiB
- 难度
- 5
- 标签
- 递交数
- 107
- 已通过
- 39
- 上传者