Problem A: QQ好友

Description

QQ已经成为现代人们生活中进行沟通、交流的重要手段。通过简单抽象,QQ好友的管理可以通过如下类进行表示:

  1. QQ类:包括一个int类型的属性,表示QQ号码;一个string类型属性,是QQ昵称。至少有一个构造函数QQ(int,string),用于初始化相关属性。
    假设QQ号码互不相同。
  2. Group类:用于对好友进行分组。包括一个string类型的属性,表示好友组的组名;一个组内QQ好友的列表,即QQ类的对象的列表。至少有如下方法:
    (1)构造函数Group(string)。
    (2)void addQQ(const QQ&):向好友列表中追加好友。
    假设所有的组名互不相同。
  3. Friends类:包括一个Group类的对象的列表。至少包括如下方法:
    (1)void addGroup(const Group&):追加一个好友组。
    (2)void findGroup(string gName):输出指定组名gName下的所有QQ好友。输出时的格式为:
    Group # :qq_id1 qq_name1; qq_id2 qq_name2; …
    其中“#”是组名,即参数gName。“qq_id1 qq_name1”等是该组内QQ好友的号码和昵称。输出时,QQ好友信息之间用一个分号(;)和一个空格隔开,最后一个后面有一个句点(.)。按照QQ号码从小到大的顺序输出。
    如果该组中没有好友,则输出:Group # :empty.
    如果指定的组不存在,则输出:Group # :not existing.
    (3)void findQq(int id):输出指定的QQ号码id所属于的组名。输出格式为:
    QQ $ in : group_name1;group_name2;…
    其中,“$”表示指定的QQ号码,即参数id的值。“group_name1”等是该号码对应的QQ好友所在的组名列表,按照组名从小到大输出。组名之间用一个分号(;)和一个空格隔开,最后一个后面有一个句点(.)。
    如果该QQ不存在,则输出:QQ $ in : empty.

Input

输入有很多行,分为四部分。
第一部分只有一行,是一个整数M>0,表示之后有M个好友组。
第二部分输入好友组的信息。每个好友组的输入包括2部分:第一部分只有一行,包括组名及该组下好友的个数N。第二部分有N行,每行是一个好友的号码和昵称。
第三部分的第一行是一个整数K>0,表示之后有K行,每行是一个组名。
第四部分的第一行是一个整数L>0,表示之后有L行,每行是一个QQ号码。

Output

见样例和题目描述。

Sample Input

2
Friends 4
1 Jack
2 Tom
3 Mary
4 Richard
Enemies 2
4 Richard
2 Tom
2
Friends
enemy
2
1
2

Sample Output

Group Friends : 1 Jack; 2 Tom; 3 Mary; 4 Richard.
Group enemy : not existing.
QQ 1 in : Friends.
QQ 2 in : Enemies; Friends.

HINT

Append Code

int main()
{
    int m, n, i, j, id;
    string str;
    Friends friends;
    cin>>m;
    for (i = 0; i < m; i++)
    {
        cin>>str>>n;
        Group group(str);
        for (j = 0; j < n; j++)
        {
            cin>>id>>str;
            QQ qq(id, str);
            group.addQQ(qq);
        }
        friends.addGroup(group);
    }
 
    cin>>m;
    for (i = 0; i < m; i++)
    {
        cin>>str;
        friends.findGroup(str);
    }
 
    cin>>n;
    for (i = 0; i < n; i++)
    {
        cin>>j;
        friends.findQq(j);
    }
    return 0;
}

代码

#include <bits/stdc++.h>
using namespace std;
int num,sum;
string s[1001];
bool stringcmp(const string& a,const string& b)
{
    return (a<b);
}
class QQ
{
public:
int hm;
string name;
QQ(int h,string n):hm(h),name(n){}
};
class Group
{
public:
string zm;
map<int,string>m;
Group(string z):zm(z){}
void addQQ(const QQ& p){m.insert(make_pair(p.hm,p.name));}
};
class Friends
{
public:
vector <Group> v;
void addGroup(const Group& t){v.push_back(t);}
void findGroup(string gName){
    num=0;
    int sm=0;
    cout<<"Group "<<gName<<" : ";
    for(int i=0;i<v.size();i++)
    {
        if(v[i].zm==gName) 
        {
            num++;
            for(map<int,string>::iterator it=v[i].m.begin();it!=v[i].m.end();it++)
            {
                if(it!=v[i].m.begin())
                cout<<"; "<<it->first<<" "<<it->second;
                else cout<<it->first<<" "<<it->second;  
            }
             
            if(v[i].m.size()==0)cout<<"empty."<<endl;
            else
            cout<<"."<<endl;
        }
    }
    if(num==0)cout<<"not existing."<<endl;
}
void findQq(int id){
    sum=0;
    cout<<"QQ "<<id<<" in : ";
    for(int i=0;i<v.size();i++)
    {
        for(map<int,string>::iterator it=v[i].m.begin();it!=v[i].m.end();it++)
        {
            if(it->first==id)
            {
                s[sum]=v[i].zm;
                sum++;
            }
        }
    } 
    if(sum!=0)
    {
        sort(s,s+sum,stringcmp);
        for(int i=0;i<sum;i++)
        {
            if(i==0)cout<<s[i];
            else cout<<"; "<<s[i];
        }
        cout<<"."<<endl;
    }
     
    if(sum==0)cout<<"empty."<<endl;
}
};
int main()
{
    int m, n, i, j, id;
    string str;
    Friends friends;
    cin>>m;
    for (i = 0; i < m; i++)
    {
        cin>>str>>n;
        Group group(str);
        for (j = 0; j < n; j++)
        {
            cin>>id>>str;
            QQ qq(id, str);
            group.addQQ(qq);
        }
        friends.addGroup(group);
    }
 
    cin>>m;
    for (i = 0; i < m; i++)
    {
        cin>>str;
        friends.findGroup(str);
    }
 
    cin>>n;
    for (i = 0; i < n; i++)
    {
        cin>>j;
        friends.findQq(j);
    }
    return 0;
}
### 回答1: 题目描述: 定义一个结构体,包含学生的姓名和成绩,输入多个学生的信息,按照成绩从高到低排序输出。 输入格式: 第一行输入一个整数n,表示学生的数量。 接下来n行,每行输入一个字符串和一个整数,表示学生的姓名和成绩。 输出格式: 按照成绩从高到低排序输出每个学生的姓名和成绩,每个学生的姓名和成绩之间用一个空格隔开。 如果有多个学生成绩相同,则按照姓名的字典序从小到大排序。 样例输入: 5 Tom 80 Jerry 90 Bob 80 Alice 85 John 90 样例输出: Jerry 90 John 90 Alice 85 Bob 80 Tom 80 解题思路: 本题需要用到结构体和排序,首先定义一个结构体,包含学生的姓名和成绩,然后输入多个学生的信息,将其存储在结构体数组,最后按照成绩从高到低排序输出。 排序时需要自定义比较函数,先按照成绩从高到低排序,如果成绩相同,则按照姓名的字典序从小到大排序。 代码实现: ### 回答2: 这道题目要求我们按照学生的成绩从高到低排序,我们可以使用结构体来存储每个学生的信息,包括姓名、学号和成绩。然后我们使用冒泡排序算法来排序,要求按照成绩从高到低排列。 首先,我们需要定义一个结构体来存储学生的信息。假设我们需要存储的三个属性为name, id, score,那么我们可以这样定义结构体: ``` struct Student { char name[20]; char id[20]; int score; }; ``` 然后我们就可以定义一个数组用来存储多个学生的信息: ``` Student students[100]; ``` 接下来,我们需要读入每个学生的信息,存储到这个数组。假设我们需要读入n个学生的信息,那么我们可以使用循环来读入每个学生的信息: ``` for (int i = 0; i < n; i++) { scanf("%s %s %d", students[i].name, students[i].id, &students[i].score); } ``` 接下来,我们使用冒泡排序算法来排序。对于每一次冒泡,我们将会通过比较相邻的两个元素,如果顺序不对就交换它们的位置。我们需要多次执行这个操作,直到所有元素都按照从大到小的顺序排序完毕。 ``` for (int i = 0; i < n - 1; i++) { for (int j = 0; j < n - i - 1; j++) { if (students[j].score < students[j + 1].score) { Student temp = students[j]; students[j] = students[j + 1]; students[j + 1] = temp; } } } ``` 在最后,我们需要输出排序后的结果。假设我们想要输出每个学生的信息,那么我们可以使用循环来输出: ``` for (int i = 0; i < n; i++) { printf("%s %s %d\n", students[i].name, students[i].id, students[i].score); } ``` 这样就完成了问题d:结构体按成绩排序的实现。 ### 回答3: 这道题的主要任务是将一个包含学生信息的结构体按照成绩从高到低进行排序。我们可以使用冒泡排序或快速排序等算法来实现。 首先我们需要定义一个结构体,包含学生姓名、学号和成绩。 ```c++ struct Student{ string name; string num; int score; }; ``` 接下来,我们定义一个函数,该函数接收一个指向结构体数组的指针,还需要一个整数类型的形参来表示数组的长度,函数的返回值为 void。该函数会根据成绩从高到低排序结构体数组。 ```c++ void sortStudents(Student* arr, int len){ for(int i = 0; i < len - 1; i++){ for(int j = i+1; j < len; j++){ if(arr[i].score < arr[j].score){ Student temp; temp = arr[i]; arr[i] = arr[j]; arr[j] = temp; } } } } ``` 接下来,我们先在主函数定义一个结构体数组并填充数据。 ```c++ int main(){ Student s[5] = { {"Tom", "001", 85}, {"Lily", "002", 90}, {"Bob", "003", 76}, {"Lucy", "004", 92}, {"John", "005", 88} }; // 调用函数进行排序 sortStudents(s, 5); // 输出排序结果 for(int i = 0; i < 5; i++){ cout << s[i].name << " " << s[i].num << " " << s[i].score << endl; } return 0; } ``` 运行程序后,我们可以看到按照成绩从高到低排序的结果输出。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值