nyoj263精挑细选

这道题思路应该不少,这类题也很常见,就是有三个量让你进行比较,按照一定的顺序和一定的规则进行排布,然后输出相关的量,这道题我一共有两种方法,第一种比较繁琐,但是就是熟练一下类的使用,第二种是比较简单的方法,我都贴上,你可以比较一下。


精 挑 细 选
时间限制:3000 ms  |  内存限制:65535 KB
难度:1

描述
    小王是公司的仓库管理员,一天,他接到了这样一个任务:从仓库中找出一根钢管。这听起来不算什么,但是这根钢管的要求可真是让他犯难了,要求如下:
    1、 这根钢管一定要是仓库中最长的;
    2、 这根钢管一定要是最长的钢管中最细的;
    3、 这根钢管一定要是符合前两条的钢管中编码最大的(每根钢管都有一个互不相同的编码,越大表示生产日期越近)。
    相关的资料到是有,可是,手工从几百份钢管材料中选出符合要求的那根…… 
    要不,还是请你编写个程序来帮他解决这个问题吧。

    输入
        第一行是一个整数N(N<=10)表示测试数据的组数)
        每组测试数据的第一行 有一个整数m(m<=1000),表示仓库中所有钢管的数量,
        之后m行,每行三个整数,分别表示一根钢管的长度(以毫米为单位)、直径(以毫米为单位)和编码(一个9位整数)。
    输出
        对应每组测试数据的输出只有一个9位整数,表示选出的那根钢管的编码,
        每个输出占一行
    样例输入

        2
        2
        2000 30 123456789
        2000 20 987654321
        4
        3000 50 872198442
        3000 45 752498124
        2000 60 765128742
        3000 45 652278122

    样例输出

        987654321
        752498124

#include<iostream>
using namespace std;
class stern{
    int length;
    int r;
    string bianhao;
    public:
        int getl(){
            return length;
        }
        int getr(){
            return r;
        }
        string getb(){
            return bianhao;
        }
        void cinl(int l){
            length=l;
        }
        void cinr(int r1){
            r=r1;
        }
        void cinb(string  bia){
            bianhao=bia;
        }
};
int main(){
    int n;
    cin>>n;
    while(n--){
     int m;
     cin>>m;
     int length;
     int r;
     string bianhao;
     stern max;
     max.cinb("00000000");
     max.cinl(0);
     max.cinr(0);
     while(m--){
            cin>>length;
            cin>>r;
            cin>>bianhao;
            if(max.getl()<length){
             max.cinl(length);
             max.cinb(bianhao);
             max.cinr(r);
            // cout<<" yes "<<endl; 
             continue;
            }
           // cout<<" ajsd"<<endl;
           // cout<<max.getr()<<length<<endl;
            if(max.getl()==length&&max.getr()>r){
                max.cinr(r);
                max.cinb(bianhao);
                max.cinl(length);
                //cout<<" ysss "<<endl;
                continue;
         } 
         if(max.getb()<bianhao&&max.getl()==length&&max.getr()==r){
            max.cinb(bianhao);
            max.cinl(length);
            max.cinr(r);
            continue;
         } 
     }
    cout<<max.getb()<<endl;
    }
    return 0;
}

第二种方法

#include<iostream>
using namespace std;
int main(){
    int n;
    cin>>n;
    while(n--){
        int m;
        cin>>m;
        int l,r;
        string bianhao;
        int lmax=0;
        int rmin=0;
        string bianhaomax="00000000";
        while(m--){
            cin>>l>>r>>bianhao;
            if(l>lmax||l==lmax&&r<rmin||l==lmax&&r==rmin&&bianhao>bianhaomax){
                lmax=l;
                rmin=r;
                bianhaomax=bianhao;
            }
        }
        cout<<bianhaomax<<endl;
    }
    return 0;
}

猜你喜欢

转载自blog.csdn.net/weixin_39587440/article/details/78207693