• POJ C程序设计进阶 编程题#4:寻找平面上的极大点


    编程题#4:寻找平面上的极大点

    来源: POJ (Coursera声明:在POJ上完成的习题将不会计入Coursera的最后成绩。)

    注意: 总时间限制: 1000ms 内存限制: 65536kB

    描述

    在一个平面上,如果有两个点(x,y),(a,b),如果说(x,y)支配了(a,b),这是指x>=a,y>=b;

    用图形来看就是(a,b)坐落在以(x,y)为右上角的一个无限的区域内。

    给定n个点的集合,一定存在若干个点,它们不会被集合中的任何一点所支配,这些点叫做极大值点。

    编程找出所有的极大点,按照x坐标由小到大,输出极大点的坐标。

    本题规定:n不超过100,并且不考虑点的坐标为负数的情况。

    输入

    输入包括两行,第一行是正整数n,表示是点数,第二行包含n个点的坐标,坐标值都是整数,坐标范围从0到100,输入数据中不存在坐标相同的点。

    输出

    按x轴坐标最小到大的顺序输出所有极大点。

    输出格式为:(x1,y1),(x2,y2),...(xk,yk)

    注意:输出的每个点之间有","分隔,最后一个点之后没有",",少输出和多输出都会被判错

    样例输入

    5
    1 2 2 2 3 1 2 3 1 4

    样例输出

    (1,4),(2,3),(3,1) 

    提示


     1 #include<stdio.h>
     2 #include<iostream>
     3 using namespace std;
     4 
     5 int main()
     6 {
     7     int n, l = 0;
     8     cin>>n;
     9     int a[101][2], b[101][2];
    10     for (int i = 0; i < n; ++i)
    11     {
    12         cin>>a[i][0]>>a[i][1];
    13     }
    14     for (int i = 0; i < n; ++i)
    15     {
    16         bool badPoint = false;
    17         for (int j = 0; j < n; ++j)
    18         {
    19             if (a[i][0]<=a[j][0] && a[i][1]<=a[j][1] && i!=j)
    20             {
    21                 badPoint = true;
    22                 break;
    23             }
    24         }
    25         if (!badPoint)
    26         {
    27             b[l][0] = a[i][0];
    28             b[l][1] = a[i][1];
    29             l++;
    30         }
    31     }
    32     for (int i = 1; i < l; ++i)
    33     {
    34         for (int j = 0; j < i; ++j)
    35         {
    36             if (b[j][0]>b[i][0] || (b[j][0] == b[i][0] && b[j][1]>b[i][1]))
    37             {
    38                 int temp[2];
    39                 temp[0] = b[j][0];
    40                 temp[1] = b[j][1];
    41                 b[j][0] = b[i][0];
    42                 b[j][1] = b[i][1];
    43                 b[i][0] = temp[0];
    44                 b[i][1] = temp[1];
    45             }
    46         }
    47     }
    48     for (int i = 0; i < l - 1; ++i)
    49     {
    50         printf("(%d,%d),", b[i][0], b[i][1]);
    51     }
    52     printf("(%d,%d)", b[l - 1][0], b[l - 1][1]);
    53     return 0;
    54 }
  • 相关阅读:
    Java基础之:OOP——继承
    Java基础之:OOP——封装
    使用requireJs进行模块化开发
    git bash 常用操作文件命令行
    requireJs使用
    常用网站
    使用requireJS
    使用echarts水球图
    jquery对象和DOM对象的区别和转换
    "abc123 ,def456",反转字母,其他位置不变
  • 原文地址:https://www.cnblogs.com/dagon/p/4731498.html
Copyright © 2020-2023  润新知