首页 > 试题广场 >

找最小数

[编程题]找最小数
  • 热度指数:6988 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 64M,其他语言128M
  • 算法知识视频讲解
第一行输入一个数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<bits/stdc++.h>
int main(){
    int n;
    while(scanf("%d",&n)!=EOF){
        int a,b,x,y;
        scanf("%d %d",&a,&b);
        for(int i=1;i<n;i++){
            scanf("%d %d",&x,&y);
            if(x<a||x==a&&y<b){
                a=x;b=y;
            }//只保留最小值
        }
        printf("%d %d\n",a,b);
    }
}

编辑于 2019-03-20 16:56:36 回复(2)

python只需要两行代码搞定:

while True:
    try:
        a, b = input(), list(map(int, input().split()))
        print(" ".join(map(str, map(lambda c: sorted(set(b)).index(c)+1, b))))
    except:
        break
发表于 2017-10-16 18:44:16 回复(1)
#include<iostream>
using namespace std;
#define max_len 1000
//用两个数组分别用于记录整数对与判断是否更新当前y值
//简单易懂

int main(void)
{
    int n;
    int min_x,min_y;
    int a[max_len];//记录整数对x,y
    bool b[max_len] = {false};//记录当前x是否已有y与之对应,用于更新y
    
    while(cin >> n)
    {
        int x,y;
        cin >> x >> y;
        min_x = x;
        a[x] = y;
        b[x] = true;
        
        for(int i =1;i < n;i++)
        {
            cin >> x >> y;
            if(b[x] == false)//当前x没有与之对应的y则赋值给数组a,置数组b为true
            {
                a[x] = y;
                b[x] = true;
            }
            if(a[x] > y && b[x] == true)
                a[x] = y;
            if(min_x > x)
                min_x = x;
        }
        cout << min_x << ' ' << a[min_x] << endl;
    }
    return 0;
}

发表于 2021-02-08 16:20:14 回复(0)
Java ,使用TreeMap
import java.util.Map;
import java.util.Scanner;
import java.util.TreeMap;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int n = scanner.nextInt();
        TreeMap<Integer, Integer> map = new TreeMap<>();
        for (int i = 0; i < n; i++) {
            int x = scanner.nextInt();
            int y = scanner.nextInt();
            if (map.get(x) == null) map.put(x, y);
            else if (map.get(x) > y) map.put(x, y);
        }
        Map.Entry<Integer, Integer> entry = map.firstEntry();
        System.out.println(entry.getKey() + " " + entry.getValue());
    }
}

解法二
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int n = scanner.nextInt();
        int minX =Integer.MAX_VALUE;
        int minY =Integer.MAX_VALUE;
        for (int i = 0; i < n; i++) {
            int x = scanner.nextInt();
            int y = scanner.nextInt();
            if (x<minX||(x==minX&&y<minY)){
                minX=x;
                minY =y;
            }
        }
        System.out.println(minX+" "+minY);
    }
}



编辑于 2020-03-19 10:25:36 回复(0)
#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;
        else 
            return 0;
    }
    else
        return 1;
}
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;
    }
}

发表于 2020-01-13 22:23:29 回复(0)
#include<stdio.h>
#include<algorithm>
using namespace std;
struct node{
    int x;
    int y;
}m[1005];
bool cmp(node a,node b)
{
    return a.x<b.x;
}
bool cmp1(node a,node b)
{
    return a.y<b.y;
}
int main()
{
    int n;
   scanf("%d",&n);
   for(int i=0;i<n;++i)
   {
       scanf("%d%d",&m[i].x,&m[i].y);
   }
    sort(m,m+n,cmp);
        int j=0;
        while(m[j].x==m[0].x)
        {
            ++j;
        }
        sort(m,m+j,cmp1);
        printf("%d %d\n",m[0].x,m[0].y);
        return 0;
   }

发表于 2018-03-01 09:21:55 回复(0)
#include<iostream>
#include<algorithm>
using namespace std;

struct Node{
    int order;
    int value;
} arra[10000];
bool cmp(Node x,Node y){
    return x.value<y.value;
}
int main(){
    int n=0;
    while(scanf("%d",&n)==1){
		for(int i=0;i<n;i++){
            arra[i].order=i;
			scanf("%d",&arra[i].value);
        }
    sort(arra,arra+n,cmp);
    int num[10000];
    int count=1;
    for(int i=0;i<n;i++){
		int j=arra[i].order;
        num[j]=count;
        if(arra[i].value!=arra[i+1].value&&i<n-1)
            count++;
    }
    printf("%d",num[0]);
    for(int i=1;i<n;i++){
        printf(" %d",num[i]);
    	}
    printf("\n");
    }
    return 0;
}

发表于 2017-03-26 20:08:54 回复(0)
package vph;

import java.util.Scanner;
import java.util.TreeSet;

public class Test {
public static void main(String[] args) {
int n,j=1;
int[] arr = new int[10000];
TreeSet<Integer> set = new TreeSet<Integer>();
Scanner read = new Scanner(System.in);
while(true){
n = read.nextInt();
for(int i=0;i<n;i++){
arr[i] = read.nextInt();
set.add(arr[i]);
}
for(int i=0;i<n;i++){
j=1;
for(int d:set){
if(arr[i]==d)   {
if(i!=n-1){
System.out.print(j+" ");
break;
}
if(i==n-1){
System.out.println(j);
break;
}
}
j++;
}
}
set.clear();
for(int i=0;i<n;i++)
arr[i] = 0;
}
}
}

发表于 2016-04-09 09:08:14 回复(1)
#include<iostream>
#include<algorithm>
using namespace std;
struct Pair{int x;int y;};
bool Compare(Pair p1,Pair p2){
    return (p1.x<p2.x)||(p1.x==p2.x&&p1.y<p2.y);
}
int main(){
    int n;
    while(cin>>n){
        Pair arr[n];
        for(int i=0;i<n;i++)
            scanf("%d%d",&arr[i].x,&arr[i].y);
        sort(arr,arr+n,Compare);
        printf("%d %d",arr[0].x,arr[0].y);
    }
}

发表于 2021-03-20 22:26:37 回复(0)
#include <iostream>
#include <cstdio>
#include <algorithm>

using namespace std;

struct Digital {
    int x;
    int y;
    bool operator< (const Digital d) const {
        if (x == d.x) {
            return y < d.y;
        }
        return x < d.x;
    }
};

int main () {
    int n;
    while (cin >> n) {
        Digital digital[n];
        for (int i = 0; i < n; ++i) {
            cin >> digital[i].x >> digital[i].y;
        }
        sort(digital, digital + n);
        cout << digital[0].x << " " << digital[0].y << endl;
    }
    return 0;
}

发表于 2021-03-16 18:53:33 回复(0)
#include<iostream>
using namespace std;

int main(){
    int n;
    while(cin>>n){
        int x, y, minx, miny;
        cin>>minx>>miny;
        n--;
        
        while(n--){
            cin>>x>>y;
            if(x<minx || (x==minx && y<miny)){
                minx=x; miny=y;
            }
        }
        cout<<minx<<' '<<miny<<endl;
    }
    return 0;
}

发表于 2021-03-14 19:54:39 回复(0)
#include<iostream>
#include<algorithm>
using namespace std;
#define N 1001
struct DATA{
    int x;
    int y;
}data[N];
bool cmp(DATA A,DATA B)
{
    if(A.x!=B.x)
        return A.x<B.x;
    else
        return A.y<B.y;
}
int main()
{
    int n;
    cin>>n;
    for(int i=0;i<n;i++)
    {
        cin>>data[i].x>>data[i].y;
    }
    sort(data, data+n,cmp);
    cout<<data[0].x<<" "<<data[0].y<<endl;
    return 0;
}
发表于 2021-02-23 09:50:50 回复(0)
#include<iostream>
#include<algorithm>
#include<cmath>
#include<cstring>
using namespace std;
struct node{
	int x;
	int y;
};
bool cmp(node a,node b){
	if(a.x!=b.x)
		return a.x<b.x;
	else
		return a.y<b.y;
}
int main(){
	int n;
	while(cin>>n){
		node h[10010];
		for(int i=1;i<=n;i++)
			cin>>h[i].x>>h[i].y;
		sort(h+1,h+1+n,cmp);
		cout<<h[1].x<<" "<<h[1].y<<endl;
	}
	return 0;
}

发表于 2021-02-20 15:51:16 回复(0)
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;

class Arr{
    private int x;
    private int y;

    public Arr(int x, int y) {
        this.x = x;
        this.y = y;
    }

    public Integer getX() {
        return x;
    }

    public Integer getY() {
        return y;
    }
}
public class Main{
    public static void main(String[] args) throws IOException {
        BufferedReader rd = new BufferedReader(new InputStreamReader( System.in));
        int n = Integer.parseInt(rd.readLine().trim());
        int n2 = n;
        List<Arr> a = new ArrayList<>();
        while(n2-->0){
            String[] s = rd.readLine().split(" ");
            a.add(new Arr(Integer.parseInt(s[0]),Integer.parseInt(s[1])));


        }
        Collections.sort(a, new Comparator<Arr>() {
            @Override
            public int compare(Arr o1, Arr o2) {
                int f = o1.getX().compareTo(o2.getX());
                int s = o1.getY().compareTo(o2.getY());
                if(f==0){
                    return s;
                }
                return f;

            }
        });
        Arr temp = a.get(0);
        System.out.println(temp.getX()+" "+temp.getY());
    }
}
使用List集合,定义一个类Arr,有X和Y两个属性,直接调用Collections排序,自定义compare函数
发表于 2020-08-13 20:02:57 回复(0)
#include<iostream>
#include<algorithm>
using namespace std;
class numpair{
    public:
        int x;
        int y;
};
bool cmp(numpair a, numpair b){
    if(a.x==b.x){
        return a.y<b.y;
    }else{
        return a.x<b.x;
    }
}
int main(){
    int n;
    while(cin>>n){
        numpair arr[1000];
        for(int i=0;i<n;i++){
            cin>>arr[i].x>>arr[i].y;
        }
        sort(arr,arr+n,cmp);
        cout<<arr[0].x<<" "<<arr[0].y;
        
    }
    return 0;
}

发表于 2020-07-13 23:30:52 回复(0)
#include<iostream>
#include<climits>
using namespace std;

int main(){
    int n;
    while(cin>>n){
        int x,y,x1=INT_MAX,y1=INT_MAX;
        //O(n)
        while(n--){
            cin>>x>>y;
            if(x<x1){
                x1=x;
                y1=y;
            }else if(x==x1){
                if(y<y1){
                    y1=y;
                }
            }
        }
        cout<<x1<<" "<<y1<<endl;
    }
    return 0;
}

发表于 2020-06-11 13:39:17 回复(0)
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        while (sc.hasNextInt()){
            int n = sc.nextInt();
            Sqlist li = new Sqlist();
            for (int i = 0; i < n; i++){
                XY numXy = new XY(sc.nextInt(), sc.nextInt());
                li.add(numXy);
            }
            int x = li.min().getX();
            int y = li.min().getY();
            System.out.print(x + " " + y);
        }
        sc.close();
    }
}

class XY{
    private int x;
    private int y;

    public XY(){}
    public XY(int x, int y) {
        this.x = x;
        this.y = y;
    }

    public int getX() {
        return x;
    }

    public int getY() {
        return y;
    }
}

class Sqlist{
    private XY[] arr = new XY[1024];
    private int len = 0;

    public void add(XY numXy){
        arr[len] = numXy;
        len++;
    }
    public XY min(){
        XY tem = arr[0];
        for (int i = 0; i < len; i++){
            if (arr[i].getX() < tem.getX()){
                tem = arr[i];
            }
            if (arr[i].getX() == tem.getX() && arr[i].getY() < tem.getY()){
                tem = arr[i];
            }
        }
        return tem;
    }
}

发表于 2020-05-10 20:13:29 回复(0)
#include<stdio.h>
 
int main()
{
    int n,i,j,t_x,t_y,count;
    scanf("%d\n",&n);
    int a[1000][2];
    int b[1000][2];
    for(i=0;i<n;i++)
    {
        for(j=0;j<2;j++)
        {
            scanf("%d",&a[i][j]);
        }
    }
    t_x=a[0][0];
     
    for(i=0;i<n;i++)
    {
        if(t_x>=a[i][0])
        t_x=a[i][0];
     }
      
     count=0;
    for(i=0;i<n;i++)
    {
        if(a[i][0]==t_x)
        {
            count++;
        }
    }
     
    int k=0;
    for(i=0;i<count;i++)
    {
        for(k;k<n;k++)
        {
            if(a[k][0]==t_x)
            {
                b[i][0]=a[k][0];
                b[i][1]=a[k][1];
                break;
            }
        }
        k=k+1;
    }
     
    t_y=b[0][1];
    for(i=0;i<count;i++)
    {
        if(t_y>=b[i][1])
        t_y=b[i][1];
    }
     
    printf("%d %d",t_x,t_y);
    return 0;
 }

二维数组
发表于 2020-05-05 22:09:57 回复(0)
#include<iostream>
#include<algorithm>

using namespace std;

int main(){ int n;
    while(cin >> n){
        int* x = new int[n]();
        int* y = new int[n]();
        for(int i=0; i<n; i++){
            cin >> x[i];
            cin >> y[i];
        }
        int min_x = *min_element(x, x+n);
        int min_x_index = min_element(x, x+n) - x;
        int min_y = y[min_x_index];
        for(int i=0; i<n; i++){
        if(x[i] == min_x){
            min_y = min(min_y, y[i]);
        }
     }
     cout<<min_x<<" "<<min_y<<endl;
    }
    return 0;
}

编辑于 2020-05-04 17:55:56 回复(0)
#include <stdio.h>
int main()
{
    int n,a[1000][2],i,min,minn,j;
    while(scanf("%d",&n)!=EOF)
    {
        for(i=0,j=0;i<n;i++)
        {
            scanf("%d%d",&a[i][0],&a[i][1]);
            if(i==0)
            {
                min=a[i][0];
            }
            else
            {
                if(a[i][0]<min)
                {
                    min=a[i][0];
                }
            }
        }
        for(i=0,j=0;i<n;i++)
        {
            if(a[i][0]==min&&j==0)
            {
                minn=a[i][1];j++;
            }
            else if(a[i][0]==min&&a[i][1]<minn)
            {
                minn=a[i][1];
            }
        }
        printf("%d %d",min,minn);
    }
    return 0;
}

发表于 2020-04-28 14:49:28 回复(0)