题目描述
第一行输入一个数n,1 <= n <= 1000,下面输入n行数据,每一行有两个数,分别是x y。输出一组x y,该组数据是所有数据中x最小,且在x相等的情况下y最小的。
输入描述:
输入有多组数据。 每组输入n,然后输入n个整数对。
输出描述:
输出最小的整数对。
示例1
输入
5 3 3 2 2 5 5 2 1 3 6
输出
2 1
思路简单,方法一:两次最大值查找法,最常规思路
#include<stdio.h>
#include <iostream>
using namespace std;
int a[1000][2];
int temp1,temp2;
int main(){
int n;int i,j;
while(scanf("%d",&n)!=EOF){
for(i=0;i<n;i++)
{
scanf("%d%d",&a[i][0],&a[i][1]);
// a[i][2]=0;
}
int min = a[0][0];
for(i=0;i<n;i++)
{
if(min>a[i][0])
{
min=a[i][0];j=i;
}
}
int min1=a[j][1];
for(i=0;i<n;i++)
{
if(min==a[i][0]&&min1>a[i][1])
{
min1=a[i][1];j=i;
}
}
printf("%d %d\n",a[j][0],a[j][1]);
}
}
方法二:利用修改后的自定义sort函数进行排序
#include<cstdio>
#include<iostream>
#include<algorithm>
using namespace std;
struct number{
int x;
int y;
};
bool Compare(number i,number j)
{
if(i.x==j.x){
return i.y<j.y;
}
else return i.x<j.x;
}
number arr[1000];
int main(){
int n,i;
while(scanf("%d",&n)!=EOF){
for(i=0;i<n;i++)
scanf("%d%d",&arr[i].x,&arr[i].y);
sort(arr,arr+n,Compare);
printf("%d %d\n",arr[0].x,arr[0].y);
}
}