GuoXin Li's Blog

最小数组

字数统计: 573阅读时长: 2 min
2020/03/01 Share

题目描述

第一行输入一个数n,1 <= n <= 1000,下面输入n行数据,每一行有两个数,分别是x y。输出一组x y,该组数据是所有数据中x最小,且在x相等的情况下y最小的。

输入描述:

1
2
输入有多组数据。
每组输入n,然后输入n个整数对。

输出描述:

1
输出最小的整数对。

示例1

输入

复制

1
2
3
4
5
6
5
3 3
2 2
5 5
2 1
3 6

输出

复制

1
2 1
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include<bits/stdc++.h>
using namespace std;

int main(){
int num;
int m, n, x, y;
while(scanf("%d",&num)!=EOF){
cin>>m>>n; //提前输入第一组数据,然后在进行比较
for(int i = 1; i < num; i++){
cin>>x>>y;
if(x<m||x==m&&y<n){
m = x;
n = y;
}
}
cout<<m<<" "<<n<<endl;
}

return 0;
}

整体思路:只保留最小的一组数据

#include 几乎包含了所有C++ 的头文件

C++常规解法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29

#include<bits/stdc++.h>
using namespace std;
struct Pair{
int x;
int y;
};
bool cmp(Pair a,Pair b){
if(a.x>b.x)
return 0; //返回升序排序
else if(a.x==b.x){
if(a.y<b.y)
return 1; //若x相同时,按y升序
else
return 0; //否则还是按x升序
}
else
return 1; //按x降序
}
int main(){
int n;
while(cin>>n){
Pair *p=new Pair[n];
for(int i=0;i<n;i++)
cin>>p[i].x>>p[i].y;
sort(p,p+n,cmp);
cout<<p[0].x<<" "<<p[0].y<<endl;
}
}

关于C++ 的sort函数的使用

参数:

1
2
3
4
5
6
7
#include <algorithm>

template< class RandomIt >
void sort( RandomIt first, RandomIt last );

template< class RandomIt, class Compare >
void sort( RandomIt first, RandomIt last, Compare comp );

形式:sort(first_pointer,first_pointer+n,cmp)

其中cmp可以省略,如果省略则默认按照升序排序

cmp 函数可以重载

  • 可在结构体内部重载
  • 也可在结构体外部进行重载

cmp基本用法

1
2
3
4
5
bool cmp(int a, int b){
return a > b; //即返回降序排序
//return a < b;//返回升序排序
//----> 其上都是根据字面排序literally
}

cmp结构体排序

1
2
3
4
5
Student stu[100];
bool cmp(Student a, Student b){
return a.x > b.x; //literally sort by a.x

}
CATALOG
  1. 1. 题目描述
  2. 2. 输入描述:
  3. 3. 输出描述:
  4. 4. 输入
  5. 5. 输出