POJ C++程序设计 编程题#9:人群的排序和分类

编程题#9:人群的排序和分类

来源: 北京大学在线程序评测系统POJ (Coursera声明:在POJ上完成的习题将不会计入Coursera的最后成绩。)

总时间限制: 1000ms 内存限制: 1024kB

描述

对人群按照输入的信息进行排序和分类。

#include <iostream>
#include <set>
#include <iterator>
#include <algorithm>
using namespace std;
// 在此处补充你的代码
int main()
{

        int t;
        cin >> t;
        set<A*,Comp> ct;
        while( t -- ) {
                int n;
                cin >> n;
                ct.clear();
                for( int i = 0;i < n; ++i)	{
                        char c; int k;
                        cin >> c >> k;

                        if( c == ‘A‘)
                                ct.insert(new A(k));
                        else
                                ct.insert(new B(k));
                }
                for_each(ct.begin(),ct.end(),Print);
                cout << "****" << endl;
        }
}

输入

第一行是整数t,表明一共t组数据. t < 20

对每组数据:

第一行是整数n,表示下面一共有n行。 0 < n < 100

下面的每行代表一个人。每行以一个字母开头,代表该人所属的类别,然后跟着一个整数,代表年龄。字母只会是 ‘A‘或‘B‘ 。整数范围0到100。数据保证年龄都不相同。

输出

对每组输入数据,将这些人按年龄从小到大输出。每个人先输出类别,再输出年龄。每组数据的末尾加一行 "****"

样例输入

2
4
A 3
B 4
A 5
B 6
3
A 4
A 3
A 2

样例输出

A 3
B 4
A 5
B 6
****
A 2
A 3
A 4
****

 1 #include <iostream>
 2 #include <set>
 3 #include <iterator>
 4 #include <algorithm>
 5 using namespace std;
 6 // 在此处补充你的代码
 7 class A {
 8 public:
 9     int age;
10     string s;
11     A(int a):age(a), s("A"){}
12     A(int a, string str):age(a), s(str) {}
13 };
14
15 class B:public A {
16 public:
17     B(int b):A(b, "B") {}
18 };
19
20 struct Comp {
21     bool operator()(const A* a1, const A* a2) const {
22         return a1->age < a2->age;
23     }
24 };
25
26 void Print(const A *a) {
27     cout<<a->s<<" "<<a->age << endl;
28 }
29
30 int main()
31 {
32
33     int t;
34     cin >> t;
35     set<A*,Comp> ct;
36     while( t -- ) {
37         int n;
38         cin >> n;
39         ct.clear();
40         for( int i = 0;i < n; ++i)    {
41             char c; int k;
42             cin >> c >> k;
43
44             if( c == ‘A‘)
45                 ct.insert(new A(k));
46             else
47                 ct.insert(new B(k));
48         }
49         for_each(ct.begin(),ct.end(),Print);
50         cout << "****" << endl;
51     }
52 }
时间: 2024-12-05 13:44:26

POJ C++程序设计 编程题#9:人群的排序和分类的相关文章

POJ C++程序设计 编程题#10:输出指定结果二

编程题#10:输出指定结果二 来源: 北京大学在线程序评测系统POJ (Coursera声明:在POJ上完成的习题将不会计入Coursera的最后成绩.) 总时间限制: 1000ms 内存限制: 1024kB 描述 通过填空使得程序输出的结果符合下面的要求. #include <iostream> #include <map> using namespace std; // 在此处补充你的代码 int A::count = 0; void func(B b) { } int mai

POJ C++程序设计 编程题#4 字符串操作

编程题#4: 字符串操作 来源: POJ (Coursera声明:在POJ上完成的习题将不会计入Coursera的最后成绩.) 注意: 总时间限制: 1000ms 内存限制: 65536kB 描述 给定n个字符串(从1开始编号),每个字符串中的字符位置从0开始编号,长度为1-500,现有如下若干操作: copy N X L:取出第N个字符串第X个字符开始的长度为L的字符串. add S1 S2:判断S1,S2是否为0-99999之间的整数,若是则将其转化为整数做加法,若不是,则作字符串加法,返回

POJ C++程序设计 编程题#3 Set 编程作业—STL2

编程题#3:Set 来源: POJ (Coursera声明:在POJ上完成的习题将不会计入Coursera的最后成绩.) 注意: 总时间限制: 5000ms 内存限制: 100000kB 描述 现有一整数集(允许有重复元素),初始为空.我们定义如下操作: add x 把x加入集合 del x 把集合中所有与x相等的元素删除 ask x 对集合中元素x的情况询问 对每种操作,我们要求进行如下输出. add 输出操作后集合中x的个数 del 输出操作前集合中x的个数 ask 先输出0或1表示x是否曾

POJ C++程序设计 编程题#2 编程作业—文件操作与模板

编程题#2: 实数的输出格式 来源: POJ (Coursera声明:在POJ上完成的习题将不会计入Coursera的最后成绩.) 注意: 总时间限制: 1000ms 内存限制: 1000kB 描述 利用流操纵算子实现: 输入一个实数,先以非科学计数法输出,小数点后面保留5位有效数字:再以科学计数法输出,小数点后面保留7位有效数字. 注意:在不同系统.编译器上的输出格式略有不同,但保证在程序中采用默认格式设置一定能在OJ平台上得到正确结果. 输入 以非科学计数法表示的一个正实数,保证可以用dou

POJ C++程序设计 编程题#3 编程作业—文件操作与模板

编程题#3: 整数的输出格式 来源: POJ(Coursera声明:在POJ上完成的习题将不会计入Coursera的最后成绩.) 注意: 总时间限制: 1000ms 内存限制: 1000kB 描述 利用流操纵算子实现: 输入一个整数,先将该整数以十六进制输出,然后再将该整数以10个字符的宽度输出,宽度不足时在左边补0. 注意:在不同系统.编译器上的输出格式略有不同,但保证在程序中采用默认格式设置一定能在OJ平台上得到正确结果. 输入 一个正整数,保证可以用int类型存储. 输出 第一行:以十六进

POJ C++程序设计 编程题#5 计算数组的低3位之和

编程题#5:计算数组的低3位之和 来源: 北京大学在线程序评测系统POJ (Coursera声明:在POJ上完成的习题将不会计入Coursera的最后成绩.) 总时间限制: 1000ms 内存限制: 1024kB 描述 输入一个正整数构成的数组a[0], a[1], a[2], ... , a[n-1], 计算它们的二进制低3位之和. #include <iostream> #include <vector> #include <algorithm> using nam

POJ C++程序设计 编程题#4:计算整数平方和

编程题#4:计算整数平方和 来源: 北京大学在线程序评测系统POJ (Coursera声明:在POJ上完成的习题将不会计入Coursera的最后成绩.) 总时间限制: 1000ms 内存限制: 1024kB 描述 下列程序每次读入一个整数N,若N为0则退出,否则输出N和N的平方. #include <iostream> using namespace std; // 在此处补充你的代码 int main(int argc, char* argv[]) { CType obj; int n; c

POJ C++程序设计 编程题#3:计算数列平方和

编程题#3:计算数列平方和 来源: 北京大学在线程序评测系统POJ (Coursera声明:在POJ上完成的习题将不会计入Coursera的最后成绩.) 总时间限制: 1000ms 内存限制: 1024kB 描述 请写出sum函数,使其可以计算输入数列的平方和. #include <iostream> using namespace std; // 在此处补充你的代码 int sqr(int n) { return n * n; } int main() { int t, n, a[0x100

POJ C++程序设计 编程题#2 输出指定结果一

编程题#2:输出指定结果一 来源: 北京大学在线程序评测系统POJ (Coursera声明:在POJ上完成的习题将不会计入Coursera的最后成绩.) 总时间限制: 1000ms 内存限制: 1024kB 描述 填写代码,使输出结果为 2 2 8 10 #include <iostream> using namespace std; class Number { public: int num; Number(int n): num(n) { } // 在此处补充你的代码 }; int ma