北航C语言上机3

版权声明:本文为博主原创文章,点个赞随便转 https://blog.csdn.net/qq_20200047/article/details/86574465
题目见400+资料
//1
//2
/*
#include<stdio.h>
#include<math.h>
int main(){
	int shi,fen;
	scanf("%d:%d",&shi,&fen);
	shi=shi>=12?(shi-12):shi;
	double cha=fen*30*1.0/60;
    double newshi=shi*30*1.0+cha;
	double newfen=fen*6*1.0;
	double ans=fabs(newshi-newfen);
	if(ans>180)printf("%.3lf\n",360-ans);
	else printf("%.3lf\n",ans);
	return 0; 
}
*/
//3
/*
#include<stdio.h>
#include<math.h>
int main(){
    int n,i,j,k;
    while(~scanf("%d",&n)){
		k=0;
		for(i=1;i<=n;i++){
			for(j=1;j<=2*n-1+k;j++){
                if(j<=n-1-k)printf("#");
				else { 
					if(j==n-k)printf("*");
				else if(j==2*n-1+k)printf("*\n");
			    else if(i==1){
                   if(j>n&&j<2*n-1)printf("*");
				}
				else printf("#");
				}
			}
			k++;
		}
		//printf("%d\n",k);
		//k=1;
		for(i=1;i<=(2*n-1)/2;i++){
			for(j=1;j<=2*n+k-3;j++){
                if(j<=n-k+1)printf("#");
				else { 
					if(j==n-k+2)printf("*");
				    else if(j==2*n+k-3)printf("*\n");
			        else if(i==(2*n-1)/2){
                    if(j>n&&j<2*n-1)printf("*");
					}
				else printf("#");
				}
			}
			k--;
		}
	}
	return 0;
}
*/
/*
2
#**
*##*
#**
3
##***
#*###*
*#####*
#*###*
##***
4
###****
##*####*
#*######*
*########*
#*######*
##*####*
###****
*/
//4
//5
/*
#include<stdio.h>
#include<ctype.h>
#include<string.h>
#include<stdlib.h>
int huiwen(int n){
   char s[20];
   int i=0,m=n;
   while(n){
	   s[i++]=(n%10+'0');
	   n/=10;
   }
   if(atoi(s)==m)return 1;
   return 0;
}
int main(){
	int i,a,b;
    scanf("%d%d",&a,&b);
    for(i=a;i<=b;i++){
		if(huiwen(i))printf("%d\n",i);
	}
	return 0; 
}
*/
//6
/*
(1)两个矩形相交的条件:两个矩形的重心距离在X和Y轴上都小于两个矩形长或宽的一半之和.这样,分两次判断一下就行了.
bool CrossLine(Rect r1,RECT r2)
{
if(abs((r1.x1+r1.x2)/2-(r2.x1+r2.x2)/2)<((r1.x2+r2.x2-r1.x1-r2.x1)/2) && abs((r1.y1+r1.y2)/2-(r2.y1+r2.y2)/2)<((r1.y2+r2.y2-r1.y1-r2.y1)/2))
return true;
return false;
}
(2) 对于这个问题,假设两个矩形相交,设相交之后的矩形为C,且矩形C的左上角坐标为(Xc1,Yc1),右下角坐标为(Xc2,Yc2),经过观察上图,很 显然可以得到:
Xc1 = max(Xa1,Xb1)
Yc1 = max(Ya1,Yb1)
Xc2 = min(Xa2,Xb2)
Yc2 = min(Ya2,Yb2)
这样就求出了矩形的相交区域。 
另外,注意到在不假设矩形相交的前提下,定义(Xc1,Yc1),(Xc2,Yc2),且Xc1,Yc1,Xc2,Yc2的值由上面四个式子得出。这样, 可以依据Xc1,Yc1,Xc2,Yc2的值来判断矩形相交。
Xc1,Yc1,Xc2,Yc2只要同时满足下面两个式子,就可以说明两个矩形相交。
3) Xc1 <= Xc2
4) Yc1 <= Yc2
即:
max(Xa1,Xb1) <= min(Xa2,Xb2)
max(Ya1,Yb1) <= min(Ya2,Yb2)
*/
#include<stdio.h>
#include<ctype.h>
#include<string.h>
#include<stdlib.h>
#define max(a,b) a>b?a:b
#define min(a,b) a<b?a:b
int main(){
	int x1,x2,y1,y2;
	int ax1,ay1,ax2,ay2;
	int bx1,bx2,by1,by2;
	scanf("%d%d%d%d",&ax1,&ay1,&ax2,&ay2);
	//ax1=x1,ay1=y2,ax2=x2,ay2=y1;
	scanf("%d%d%d%d",&bx1,&by1,&bx2,&by2);
	//bx1=x1,by1=y2,bx2=x2,by2=y1;
	//0 0 2 2  0 2 2 0
	//1 1 3 4  1 4 3 1
	int jx1,jy1,jx2,jy2;
	jx1=max(ax1,bx1);//1
	jy1=max(ay1,by1);//1
	jx2=min(ax2,bx2);//2
	jy2=min(ay2,by2);//2
	if(jx1<=jx2&&jy1<=jy2){
		printf("%d\n",(jx2-jx1)*(jy2-jy1));
	}
	else printf("0\n");
	return 0;
}

猜你喜欢

转载自blog.csdn.net/qq_20200047/article/details/86574465