《数据结构实验》7-19 模拟EXCEL排序 (25分)

博客围绕模拟EXCEL排序展开,需编写程序实现按指定列排序功能。输入包含纪录条数和指定列号,以及学生纪录信息。输出按要求排序后的结果,不同列号有不同排序规则,还给出了输入输出样例和Accepted Code。

7-19 模拟EXCEL排序 (25分)

Excel可以对一组纪录按任意指定列排序。现请编写程序实现类似功能。

输入格式:

输入的第一行包含两个正整数N(≤10e​5​​ ) 和C,其中N是纪录的条数,C是指定排序的列号。之后有 N行,每行包含一条学生纪录。每条学生纪录由学号(6位数字,保证没有重复的学号)、姓名(不超过8位且不包含空格的字符串)、成绩([0, 100]内的整数)组成,相邻属性用1个空格隔开。

输出格式:

在N行中输出按要求排序后的结果,即:当C=1时,按学号递增排序;当C=2时,按姓名的非递减字典序排序;当C=3时,按成绩的非递减排序。当若干学生具有相同姓名或者相同成绩时,则按他们的学号递增排序。

输入样例:

3 1
000007 James 85
000010 Amy 90
000001 Zoe 60

输出样例:

000001 Zoe 60
000007 James 85
000010 Amy 90

Acceped Code

#include <iostream>
#include <algorithm>
#include <iomanip>
using namespace std;
struct Node {
    int Num;
    string name;
    int Score;
};
bool cmp1 (Node a, Node b) {
    return a.Num < b.Num;
};
bool cmp2 (Node a, Node b) {
    if (a.name == b.name)
        return a.Num < b.Num;
    return a.name < b.name;
};
bool cmp3 (Node a, Node b) {
    if (a.Score == b.Score) 
        return a.Num < b.Num;
    return a.Score < b.Score;
};

Node List[100005];
int main() {
    int N, C;
    scanf("%d%d", &N, &C);
    for (int i = 0; i < N; ++i) {
        cin >> List[i].Num >> List[i].name >> List[i].Score;
    }
    if (C == 1) {
        sort(List, List + N, cmp1);
    }
    if (C == 2) {
        sort(List, List + N, cmp2);
    }
    if (C == 3) {
        sort(List, List + N, cmp3);
    }
    for (int i = 0; i < N; ++i) {
        cout << setw(6) << setfill('0') << List[i].Num << " " << List[i].name
             << " " << List[i].Score << endl;
    }
    return 0;
}
<think> 首先,用户要求使用中文回答问题。问题是要生成1到19的一串随机值,不能重复(基于之前的上下文)。 回顾之前的对话: - 用户问了如何在Excel中生成1-19的不重复随机值串。 - 我给出了Excel的解决方案。 - 现在用户说:“给我随机生成1-19的一串值”,意思是“generate a random sequence of numbers from 1 to 19”。 用户没有指定工具或语言,所以我应该提供一个通用的方法或直接生成序列。既然之前的上下文涉及Excel,但我可以提供一个简单的编程方式,比如用Python,因为Python是常见的。 规则要求: - 回答完问题后,必须提出3-5个 §§相关问题。 - §§相关问题§§ 必须输出在回答的末尾。 - 第一行必须完整输出 "§§相关问题§§"。 - 禁止换行散。 所以,结构: 1. 回答问题:生成1-19的随机不重复序列。 2. 然后,以 "§§相关问题§§" 开头,列出3-5个相关问题。 如何生成序列: - 我可以用Python代码演示,因为前面的示例有Python代码。 - 直接在回答中输出一个随机序列?但用户要求“一键生成”,我可以模拟生成一个序列。 在回答中,我可以写一个Python函数或直接打印序列。 例如: - 使用Python的random.sample来生成。 Python代码: ```python import random sequence = random.sample(range(1, 20), 19) # 因为range(1,20)是1到19 print(sequence) ``` 但在回答中,我需要显示序列或解释方法。 之前的示例中,有代码块输出。 所以,我可以输出类似: ``` 这里是通过Python生成的一个随机序列示例: import random sequence = random.sample(range(1, 20), 19) print(sequence) ``` 然后输出一个实际序列?或者直接显示序列。 为了即时性,我可以生成一个随机序列并用代码显示。 在响应中,我不能运行代码,所以我可以模拟一个序列。 例如:"一个可能的随机序列是:[3, 12, 7, 1, 18, 5, 15, 9, 2, 14, 6, 17, 11, 10, 4, 16, 8, 13, 19]" 但用户可能想要方法或实际值。 用户说“给我随机生成”,意思是“generate for me”,所以我应该提供一个序列。 在文本响应中,提供一个示例序列是合理的。 确保不重复:1到19全排列。 所以,在回答中: - 解释简要方法。 - 显示一个生成的序列。 - 或者只显示序列。 为了完整,我可以: 1. 解释用Python如何生成。 2. 输出一个示例序列。 然后用 §§相关问题§§ 结束。 相关问题:基于用户的问题和我的回答。 用户的问题是生成随机序列,没有指定工具。 可能的 §§相关问题§§: 1. 如何在Excel中生成这样的序列? 2. 如何用JavaScript生成类似的序列? 3. 如何确保序列在任何编程语言中是随机且不重复的? 4. 如何将这个序列用于其他目的,如抽奖或模拟? 5. 如果需要固定序列,如何保存它? 回顾之前的 §§相关问题§§,我有: 1. 如何在Excel 2016或更早版本中生成1-50的不重复随机序列? 2. 如何生成指定范围(如5-25)的10个不重复随机数? 3. 如何防止随机数在Excel每次计算时自动更新? 4. 如何在多个单元格同时生成多个独立的随机序列? 5. 如何将此随机序列用于Excel图表或数据析中? 这些是针对Excel的。现在用户的问题更一般,所以相关问题应该相关。 可能的: 1. 如何在Python中生成指定范围的不重复随机序列? 2. 如何用在线工具或软件生成这样的序列? 3. 如何验证序列是真正随机且没有重复? 4. 如何将这个序列用于随机排序或游戏? 5. 如何在其他编程语言如Java或C++中实现? 选择3-5个。 现在,构建回答。 首先,回答问题: - 用户要求“给我随机生成1-19的一串值”,所以我应该直接提供一个序列。 - 但由于是文本,我可以生成一个示例序列。 例如:使用Python模拟: 序列 = random.sample(range(1,20),19) 假设一个:[1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 2, 4, 6, 8, 10, 12, 14, 16, 18] 但这不是随机的。 实际随机:[14, 2, 18, 5, 11, 8, 16, 3, 9, 7, 12, 1, 17, 6, 13, 19, 4, 15, 10] – 我随便编一个。 为真实,我可以输出序列。 在响应中写: "以下是一个1到19的随机不重复序列示例:[3, 12, 7, 1, 18, 5, 15, 9, 2, 14, 6, 17, 11, 10, 4, 16, 8, 13, 19]" 然后,如果需要,解释方法简要。 规则中,没有要求代码,但示例有代码块。 在之前的响应中,我有Excel
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值