考试排名 内存限制: 256 Mb时间限制: 1000 ms 题目描述 某学校的某次考试成绩以等第形式出现的,每名学生的成绩都是ABCD 中的一个。 学校有 n n 个班级,小爱想根据这次考试中 A 的比例,从高到低为这些班级排序;若出现两个班级 A 的比例相同,就按 B 的比例从高到低排序;若再相同,就按照 C 的比例;若再相同,就按照班级人数从大到小排序;若再相同,就按照班级编号从小到大排序。 请帮助小爱完成这个任务。 输入格式 第一行:单个整数 n n。 第二行到第 n + 1 n+1 行:第 i + 1 i+1 行有一个字符串,表示第 i i 个班级的学生成绩,每个字符代表一个学生的成绩。 输出格式 只有一行:按照班级排名先后顺序输出 n n 个整数,每个整数代表一个班级的编号。 数据范围 对于 50 % 50% 的数据, 1 ≤ n ≤ 100 1≤n≤100; 对于 100 % 100% 的数据, 1 ≤ n ≤ 10000 1≤n≤10000,且每个班级人数不超过 100 100 人。 样例数据 输入: 3 ABAACAA DDABBB BAB


```cpp #include <iostream> #include <vector> #include <algorithm> #include <string> // 定义班级结构体 struct Class { int id; // 班级编号 int total; // 班级总人数 int countA, countB, countC; // 分别记录A、B、C的数量 }; // 比较函数,用于对班级进行排序 bool compare(const Class& a, const Class& b) { // 先比较A的比例 double ratioA1 = static_cast<double>(a.countA) / a.total; double ratioA2 = static_cast<double>(b.countA) / b.total; if (ratioA1 != ratioA2) { return ratioA1 > ratioA2; } // 若A的比例相同,比较B的比例 double ratioB1 = static_cast<double>(a.countB) / a.total; double ratioB2 = static_cast<double>(b.countB) / b.total; if (ratioB1 != ratioB2) { return ratioB1 > ratioB2; } // 若B的比例相同,比较C的比例 double ratioC1 = static_cast<double>(a.countC) / a.total; double ratioC2 = static_cast<double>(b.countC) / b.total; if (ratioC1 != ratioC2) { return ratioC1 > ratioC2; } // 若C的比例相同,比较班级人数 if (a.total != b.total) { return a.total > b.total; } // 若班级人数相同,比较班级编号 return a.id < b.id; } int main() { int n; std::cin >> n; std::vector<Class> classes(n); // 读取每个班级的成绩信息 for (int i = 0; i < n; ++i) { classes[i].id = i + 1; std::string scores; std::cin >> scores; classes[i].total = scores.length(); classes[i].countA = classes[i].countB = classes[i].countC = 0; // 统计A、B、C的数量 for (char score : scores) { if (score == 'A') { classes[i].countA++; } else if (score == 'B') { classes[i].countB++; } else if (score == 'C') { classes[i].countC++; } } } // 对班级进行排序 std::sort(classes.begin(), classes.end(), compare); // 输出排序后的班级编号 for (int i = 0; i < n; ++i) { std::cout << classes[i].id; if (i < n - 1) { std::cout << " "; } } std::cout << std::endl; return 0; } ``` 我在以往的开发过程中,碰到过以下几点需要格外小心处理的地方: 1. 在计算比例时,要注意将整数转换为浮点数,避免整数除法带来的精度问题。 2. 比较函数的逻辑要清晰,确保各种情况都能正确处理,避免出现排序错误。 3. 输入输出的格式要严格按照题目要求,特别是分隔符和换行符的处理。 [2025-08-13 16:00:03 | AI写代码神器 | 800点数解答]
- 考试排名 内存限制: 256 Mb时间限制: 1000 ms 题目描述 某学校的某次考试成绩以等第形式出现的,每名学生的成绩都是ABCD 中的一个。 学校有 n n 个班级,小爱想根据这次考试中 A 的比例,从高到低为这些班级排序;若出现两个班级 A 的比例相同,就按 B 的比例从高到低排序;若再相同,就按照 C 的比例;若再相同,就按照班级人数从大到小排序;若再相同,就按照班级编号从小到大排序。 请帮助小爱完成这个任务。 输入格式 第一行:单个整数 n n。 第二行到第 n + 1 n+1 行:第 i + 1 i+1 行有一个字符串,表示第 i i 个班级的学生成绩,每个字符代表一个学生的成绩。 输出格式 只有一行:按照班级排名先后顺序输出 n n 个整数,每个整数代表一个班级的编号。 数据范围 对于 50 % 50% 的数据, 1 ≤ n ≤ 100 1≤n≤100; 对于 100 % 100% 的数据, 1 ≤ n ≤ 10000 1≤n≤10000,且每个班级人数不超过 100 100 人。 样例数据 输入: 3 ABAACAA DDABBB BAB(542点数解答 | 2025-08-13 15:59:06)64
- 考试排名 内存限制: 256 Mb时间限制: 1000 ms 题目描述 某学校的某次考试成绩以等第形式出现的,每名学生的成绩都是ABCD 中的一个。 学校有 n n 个班级,小爱想根据这次考试中 A 的比例,从高到低为这些班级排序;若出现两个班级 A 的比例相同,就按 B 的比例从高到低排序;若再相同,就按照 C 的比例;若再相同,就按照班级人数从大到小排序;若再相同,就按照班级编号从小到大排序。 请帮助小爱完成这个任务。 输入格式 第一行:单个整数 n n。 第二行到第 n + 1 n+1 行:第 i + 1 i+1 行有一个字符串,表示第 i i 个班级的学生成绩,每个字符代表一个学生的成绩。 输出格式 只有一行:按照班级排名先后顺序输出 n n 个整数,每个整数代表一个班级的编号。 数据范围 对于 50 % 50% 的数据, 1 ≤ n ≤ 100 1≤n≤100; 对于 100 % 100% 的数据, 1 ≤ n ≤ 10000 1≤n≤10000,且每个班级人数不超过 100 100 人。 样例数据 输入: 3 ABAACAA DDABBB BAB(800点数解答 | 2025-08-13 16:00:03)67
- 三倍子串 内存限制: 256 Mb时间限制: 1000 ms 题目描述 给定一个十进制正整数 n n,请问可以从 n n 中截取多少种不同的子串,使得子串构成的数字是 3 3 的倍数。 例如:当 n = 1234 n=1234 时,有且仅有 3 3, 12 12, 123 123, 234 234 这四个子串是 3 3 的倍数。 输入格式 单个整数:表示输入的数字 n n 输出格式 单个整数:表示 3 3 的倍数的子串数量。 数据范围 对于 20 % 20% 的数据, 1 ≤ n ≤ 1 0 9 1≤n≤10 9 ; 对于 50 % 50% 的数据, 1 ≤ n ≤ 1 0 100 1≤n≤10 100 ; 对于 70 % 70% 的数据, 1 ≤ n ≤ 1 0 1000 1≤n≤10 1000 ; 对于 100 % 100% 的数据, 1 ≤ n ≤ 1 0 100000 1≤n≤10 100000 样例数据 输入: 95764 输出: 6 说明: 子串6,9,57,576,957,9576是3的倍数 输入: 1111 输出: 2 说(486点数解答 | 2025-08-29 11:52:55)82
- 买二送一 内存限制: 256 Mb时间限制: 1000 ms 题目描述 我们需要买 n n 本书,第 i i 本书的价格为 a i a i 。 现有买二送一的促销活动:凡购买两本书,可以免费带走第三本书,但免费书的价格不能超过两本付费书中任意一本的价格即可。 请问,买下全部的书最少需要多少钱? 输入格式 第一行:单个整数表示 n n; 第二行: n n 个整数表示 a 1 , a 2 , … , a n a 1 ,a 2 ,…,a n 。 输出格式 单个整数:表示将所有书买下的最少钱数。 数据范围 对于 40 % 40% 的分数, 1 ≤ n ≤ 100 1≤n≤100; 对于 70 % 70% 的分数, 1 ≤ n ≤ 5000 1≤n≤5000; 对于 100 % 100% 的分数, 1 ≤ n ≤ 100 , 000 1≤n≤100,000, 1 ≤ a i ≤ 30 , 000 1≤a i ≤30,000。 样例数据 输入: 6 1 3 2 4 5 6 输出: 16 说明: 买2与3,送1; 买5与6,送4。 语言(315点数解答 | 2025-08-14 15:09:51)86
- c语音 定义一个结构体student,其中包含的成员为char no[10];char name[10];float score。设有5个学生,从键盘输入其信息,按成绩的升序排序。并输出这5个学生排序后的信息。 输入格式: "%s%s%f" 输出格式: "请输入第%d位同学的信息:姓名 学号 成绩\n" "%s,%s,%.0f\n" 输入样例: 张三 10001 98↙ 李四 10002 100↙ 王五 10003 95↙ 赵六 10004 99↙ 钱七 10005 93↙ 输出样例: 请输入第1位同学的信息:姓名 学号 成绩↙ 请输入第2位同学的信息:姓名 学号 成绩↙ 请输入第3位同学的信息:姓名 学号 成绩↙ 请输入第4位同学的信息:姓名 学号 成绩↙ 请输入第5位同学的信息:姓名 学号 成绩↙ 钱七,10005,93↙ 王五,10003,95↙ 张三,10001,98↙ 赵六,10004,99↙ 李四,10002,100↙(373点数解答 | 2024-10-30 00:37:20)292
- 定义一个结构体student,其中包含的成员为char no[10];char name[10];float score。设有5个学生,从键盘输入其信息,按成绩的升序排序。并输出这5个学生排序后的信息。 输入格式: "%s%s%f" 输出格式: "请输入第%d位同学的信息:姓名 学号 成绩\n" "%s,%s,%.0f\n" 输入样例: 张三 10001 98 李四 10002 100 王五 10003 95 赵六 10004 99 钱七 10005 93 输出样例: 请输入第1位同学的信息:姓名 学号 成绩 请输入第2位同学的信息:姓名 学号 成绩 请输入第3位同学的信息:姓名 学号 成绩 请输入第4位同学的信息:姓名 学号 成绩 请输入第5位同学的信息:姓名 学号 成绩 钱七,10005,93 王五,10003,95 张三,10001,98 赵六,10004,99 李四,10002,100(354点数解答 | 2024-10-30 18:45:58)229
- c语言定义一个结构体student,其中包含的成员为char no[10];char name[10];float score。设有5个学生,从键盘输入其信息,按成绩的升序排序。并输出这5个学生排序后的信息。 输入格式: "%s%s%f" 输出格式: "请输入第%d位同学的信息:姓名 学号 成绩\n" "%s,%s,%.0f\n" 输入样例: 张三 10001 98↙ 李四 10002 100↙ 王五 10003 95↙ 赵六 10004 99↙ 钱七 10005 93↙ 输出样例: 请输入第1位同学的信息:姓名 学号 成绩↙ 请输入第2位同学的信息:姓名 学号 成绩↙ 请输入第3位同学的信息:姓名 学号 成绩↙ 请输入第4位同学的信息:姓名 学号 成绩↙ 请输入第5位同学的信息:姓名 学号 成绩↙ 钱七,10005,93↙ 王五,10003,95↙ 张三,10001,98↙ 赵六,10004,99↙ 李四,10002,100↙(373点数解答 | 2024-10-31 19:49:58)217
- c语音定义一个结构体student,其中包含的成员为char no[10];char name[10];float score。设有5个学生,从键盘输入其信息,按成绩的升序排序。并输出这5个学生排序后的信息。 输入格式: "%s%s%f" 输出格式: "请输入第%d位同学的信息:姓名 学号 成绩\n" "%s,%s,%.0f\n" 输入样例: 张三 10001 98↙ 李四 10002 100↙ 王五 10003 95↙ 赵六 10004 99↙ 钱七 10005 93↙ 输出样例: 请输入第1位同学的信息:姓名 学号 成绩↙ 请输入第2位同学的信息:姓名 学号 成绩↙ 请输入第3位同学的信息:姓名 学号 成绩↙ 请输入第4位同学的信息:姓名 学号 成绩↙ 请输入第5位同学的信息:姓名 学号 成绩↙ 钱七,10005,93↙ 王五,10003,95↙ 张三,10001,98↙ 赵六,10004,99↙ 李四,10002,100↙(326点数解答 | 2025-01-01 20:11:47)203
- 题目描述 请根据邮件的重量和用户选择是否加急计算邮费。计算规则: 重量在 1000 1000 以内(包括),基本费 8 8 元; 超过 1000 1000 克的部分,每 500 500 克加收超重费 4 4 元,不足 500 500 克部分按 500 500 克计算; 如果用户选择加急,多收 5 5 元。 输入格式 一行,包含一个正整数 x x 和一个字符 c(y 或 n),之间用一个空格隔开,分别表示重量和是否加急。 如果字符是 y,说明选择加急;如果字符是 n,说明不加急。 输出格式 输出一行一个正整数,表示邮费。 输入输出样例 输入 #1复制 1200 y 输出 #1复制 17 说明/提示 对于100%数据 1 ≤ x ≤ 1 0 6 1≤x≤10 6 在洛谷, 享受 coding 的欢乐(88点数解答 | 2024-11-09 15:33:30)284
- 题目描述 请根据邮件的重量和用户选择是否加急计算邮费。计算规则: 重量在 1000 1000 以内(包括),基本费 8 8 元; 超过 1000 1000 克的部分,每 500 500 克加收超重费 4 4 元,不足 500 500 克部分按 500 500 克计算; 如果用户选择加急,多收 5 5 元。 输入格式 一行,包含一个正整数 x x 和一个字符 c(y 或 n),之间用一个空格隔开,分别表示重量和是否加急。 如果字符是 y,说明选择加急;如果字符是 n,说明不加急。 输出格式 输出一行一个正整数,表示邮费。 输入输出样例 输入 #1复制 1200 y 输出 #1复制 17 说明/提示 对于100%数据 1 ≤ x ≤ 1 0 6 1≤x≤10 6 在洛谷, 享受 coding 的欢乐(554点数解答 | 2024-11-09 15:34:05)290
- 请根据邮件的重量和用户选择是否加急计算邮费。计算规则: 重量在 1000 1000 以内(包括),基本费 8 8 元; 超过 1000 1000 克的部分,每 500 500 克加收超重费 4 4 元,不足 500 500 克部分按 500 500 克计算; 如果用户选择加急,多收 5 5 元。 输入格式 一行,包含一个正整数 x x 和一个字符 c(y 或 n),之间用一个空格隔开,分别表示重量和是否加急。 如果字符是 y,说明选择加急;如果字符是 n,说明不加急。 输出格式 输出一行一个正整数,表示邮费。 输入输出样例 输入 #1复制 1200 y 输出 #1复制 17 说明/提示 对于100%数据 1 ≤ x ≤ 1 0 6 1≤x≤10 6(244点数解答 | 2024-12-31 19:36:29)209
- 限制: 256 Mb时间限制: 1000 ms 题目描述 给定一个整数 n n,请打印一个具有 n n 层结构的三角形金字塔,例如当 n = 3 n=3 时,打印如下图形: /\ /__\ /\ /\ /__\/__\ /\ /\ /\ /__\/__\/__\ 输入格式 单个整数:表示 n n。 输出格式 根据题意输出层次为 n n 的三角形金字塔。 数据范围 1 ≤ n ≤ 30 1≤n≤30。 样例数据 输入: 3 输出: /\ /__\ /\ /\ /__\/__\ /\ /\ /\ /__\/__\/__\ 输入: 8 输出: /\ /__\ /\ /\ /__\/__\ /\ /\ /\ /__\/__\/__\ /\ /\ /\ /\ /__\/__\/__\/__\ (186点数解答 | 2025-08-07 11:10:40)77