愿尔安然无恙


私信TA

用户名:H2130819045

访问量:12314

签 名:

向往星辰大海,喜欢落日晚风。

等  级
排  名 58
经  验 10460
参赛次数 16
文章发表 56
年  龄 20
在职情况 学生
学  校 贺州学院
专  业 软件工程

  自我简介:

不想改bug ^_^

解题思路:对于两个不确定位置的对角坐标,用max,min函数确定左右(上下)边界,用abs函数确定其长度与宽度;

注意事项:注意不同数组所代表的含义;

参考代码:

#include <iostream>
#include <cmath>
#include <cstring>
#include <algorithm>
using namespace std;
int main()
{
    int n,arr[20][5],x,y,lenth[20],wide[20],s[20],ss[20],flags[20];
    cin>>n;
    memset(flags,0,sizeof(flags));//默认标记为0(电针不在矩阵内),若在,重新标记即可  
    memset(s,0,sizeof(s)); //面积初始化为0,满足条件的重新赋值即可,保留下标和对应面积值 
    memset(ss,0,sizeof(ss)); //用于找出满足条件的最大面积,会打乱下标 
    for(int i=1;i<=n;i++)
    {
        for(int j=1;j<=4;j++)//列标j代表4个数据 
        {
            cin>>arr[i][j];//行标i表示第几个矩形 
        }
    }
    cin>>x>>y;//输入电针坐标 
    for(int i=1;i<=n;i++)
    {
        if(x>=min(arr[i][3],arr[i][1])&&x<=max(arr[i][3],arr[i][1]))//横坐标在矩形范围内(小的在左边,大的在右边) 
        if(y>=min(arr[i][4],arr[i][2])&&y<=max(arr[i][4],arr[i][2]))//纵坐标在矩形范围内(小的在下边,大的在上边)
        flags[i]=1;//电针在矩形范围内标记为1 
    }
    for(int i=1;i<=n;i++)
    {
        if(flags[i]==1)//对于包含电针的矩形求其面积,并赋值给另一数组ss,用于排序 
        {
            lenth[i]=abs(arr[i][3]-arr[i][1]);//注意用绝对值函数,因为不确定哪个坐标大 
            wide[i]=abs(arr[i][4]-arr[i][2]);
            s[i]=wide[i]*lenth[i];
            ss[i]=s[i];
        }
    }
    sort(ss+1,ss+n+1);//对满足条件的面积进行排序 (数组首地址从第0个开始,我写的是从1开始(保证对应行标),故加1),最后一个元素ss[n]为最大值 
    for(int i=1;i<=n;i++)//从第一个开始判断,以保证编号尽可能小 
    {
        if(flags[i]==1&&s[i]==ss[n])//电针在矩形范围内,且为最大面积 
        {
            cout<<i;//输出行标,即第几个矩形 
            return 0;
        }
    }
    return 0;
}


 

0.0分

0 人评分

  评论区