解题思路:对于两个不确定位置的对角坐标,用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 人评分
C语言程序设计教程(第三版)课后习题10.7 (C语言代码)浏览:568 |
母牛的故事 (C语言代码)浏览:1451 |
核桃的数量 (C语言代码)浏览:726 |
矩阵加法 (C语言代码)浏览:1769 |
简单的a+b (C语言代码)浏览:529 |
字符串输入输出函数 (C语言代码)浏览:2609 |
钟神赛车 (C语言代码)浏览:665 |
1134题解(求分析)浏览:795 |
A+B for Input-Output Practice (IV) (C语言代码)浏览:529 |
简单的a+b (C语言代码)浏览:617 |