ccf 202303-1 田地丈量 c语言简单方法

问题描述
西西艾弗岛上散落着 块田地。每块田地可视为平面直角坐标系下的一块矩形区域,由左下角坐标 和右上角坐标 唯一确定,且满足 、。这 块田地中,任意两块的交集面积均为 ,仅边界处可能有所重叠。

最近,顿顿想要在南山脚下开垦出一块面积为 矩形田地,其左下角坐标为a 、右上角坐标为 b。试计算顿顿选定区域内已经存在的田地面积。

输入格式
从标准输入读入数据。

输入共 行。

输入的第一行包含空格分隔的三个正整数n 、 a和 b,分别表示西西艾弗岛上田地块数和顿顿选定区域的右上角坐标。

接下来 行,每行包含空格分隔的四个整数 x1、y1、x2 和y2 ,表示一块田地的位置。

输出格式
输出到标准输出。

输出一个整数,表示顿顿选定区域内的田地面积。

样例输入
4 10 10
0 0 5 5
5 -2 15 3
8 8 15 15
-2 10 3 15
Data
样例输出
44


#include//万能头文件 其实不建议只记住这个头文件
using namespace std;

int main()
{
	int a[10000][4];//存入n行的x1 y1 x2 y2 因为每一行都有二个x二个y 1000应该也可以要比100大
	int total=0;//累加面积 
	int n;//n行数据 
	int x,y;// x y 表示a,b,因为只有二个数表示面积且是原点开始 
	cin>>n>>x>>y;
	for(int i=0;i<n;i++)
	{
		cin>>a[i][0]>>a[i][1]>>a[i][2]>>a[i][3];//输入一行的x1y1x2y2也方便回车换行 
	}
	
	for(int i=0;i<n;i++)
	{
		for(int j=0;j<4;j++)//遍历每一行 
		{
			if(j==0||j==2)//0和2表示x1x2 
			{
				if(a[i][j]<=0)//为0或者为负数就更改原本的值为0 
				{
					a[i][j]=0;
				}
				else if(a[i][j]>=x)//大于等于x也就是a就更改原本的 值为x 也就是x轴的a 
				{
					a[i][j]=x;
				}
			}
			else if(j==1||j==3)//1和3表示y1y2 
			{
				if(a[i][j]<=0)//为0或者为负数就更改原本的值为0 
				{
					a[i][j]=0;
				}
				else if(a[i][j]>=y)//大于等于y也就是b就更改原本的值为y 也就是y轴的b
				{
					a[i][j]=y;
				}
			}
		}
	}
	for(int i=0;i<n;i++)
	{
		total=total+abs(((a[i][2]-a[i][0])*(a[i][3]-a[i][1])));//每一行的x1x2的差值乘以y1y2的差值的累加就是最后的面积,abs是防止出现负数 
	}
	cout<<total<<endl;
	return 0;
} 

等待诸君更好更简洁的解题方法出现。

你可能感兴趣的:(c语言,算法)