PAT 1036 Boys vs Girls (25)

本文介绍了一个程序设计问题,即如何找出所有男性学生中的最低分数与所有女性学生中的最高分数,并计算两者之间的差距。该程序使用了结构体来存储学生的姓名、性别、ID和分数,并通过不同的排序方式分别找出目标学生。

This time you are asked to tell the difference between the lowest grade of all the male students and the highest grade of all the female students.

Input Specification:

Each input file contains one test case. Each case contains a positive integer N, followed by N lines of student information. Each line contains a student's name, gender, ID and grade, separated by a space, where name and ID are strings of no more than 10 characters with no space, gender is either F (female) or M (male), and grade is an integer between 0 and 100. It is guaranteed that all the grades are distinct.

Output Specification:

For each test case, output in 3 lines. The first line gives the name and ID of the female student with the highest grade, and the second line gives that of the male student with the lowest grade. The third line gives the difference gradeF-gradeM. If one such kind of student is missing, output "Absent" in the corresponding line, and output "NA" in the third line instead.

Sample Input 1:

3
Joe M Math990112 89
Mike M CS991301 100
Mary F EE990830 95
Sample Output 1:
Mary EE990830
Joe Math990112
6
Sample Input 2:
1
Jean M AA980920 60
Sample Output 2:
Absent
Jean AA980920

NA

/* 考察结构体排序 QvQ..  
 * 午睡操场传来蝉的声音 多少年后也还是很好听~~
*/
#include "iostream"
#include "vector"
#include "cstring"
#include "string"
#include "stack"
#include "algorithm"
using namespace std;
struct Node {
	char name[11];
	char gender;
	char id[11];
	int grade;
};
bool cmp(const Node &n1, const Node &n2) {
	return n1.grade > n2.grade;
}
bool cmp1(const Node &n1, const Node &n2) {
	return n1.grade < n2.grade;
}
int main() {
	int n;
	vector<Node>v1, v2;
	cin >> n;
	for (int i = 0; i < n; i++) {
		Node node;
		cin >> node.name >> node.gender >> node.id >> node.grade;
		if (node.gender == 'M') {
			v1.push_back(node);
		}
		if (node.gender == 'F') {
			v2.push_back(node);
		}
	}
	sort(v1.begin(),v1.end(),cmp1);
	sort(v2.begin(), v2.end(), cmp);
	if (v2.size()) {
		cout << v2[0].name << " " << v2[0].id << endl;
	}
	else {
		cout << "Absent" << endl;
	}
	if (v1.size()) {
		cout << v1[0].name << " " << v1[0].id << endl;
	}
	else {
		cout << "Absent" << endl;
	}
	if(v1.size()&&v2.size()){
		cout << v2[0].grade - v1[0].grade << endl;
	}
	else {
		cout << "NA" << endl;
	}
	return 0;
}


### 关于 PAT 1036 的 C 语言解题思路 针对PAT 1036 题目,可以采用结构化的方法处理输入并解析特定模式的数据。考虑到该类问题通常涉及字符串处理和格式化输入输出,在解答过程中应当充分利用标准库函数如 `sscanf` 和 `printf` 来简化编程逻辑。 #### 使用 sscanf 函数读取数据 为了高效地从给定的输入串中抽取所需的信息,可以借鉴类似的例子[^1]: ```c #include <stdio.h> int main() { char str[] = "42 3.14"; int num; float fnum; sscanf(str, "%d %f", &num, &fnum); printf("Integer: %d\n", num); printf("Float: %f\n", fnum); return 0; } ``` 这段代码展示了如何利用 `sscanf` 函数按照指定格式提取变量值。对于PAT 1036而言,可以根据具体需求调整格式说明符以及目标变量类型,从而适应不同的输入形式。 #### 处理剪切粘贴操作 如果涉及到更复杂的文本编辑功能,则可参考其他相似案例中的实现方式[^3]。例如,通过定义额外的缓冲区保存被剪切的部分,并依据前后缀条件决定插入点的位置;若未找到合适的匹配项,默认将新内容附加到原字符串结尾处。 #### 完整解决方案框架 基于上述分析,这里提供一个适用于PAT 1036的大致解决框架(假设题目要求为简单的数值转换或字符替换),实际编码时需根据官方文档进一步细化各部分细节: ```c #include <stdio.h> #include <string.h> // 主程序入口 int main(){ // 初始化必要的变量... while (scanf("%s", input)!=EOF){ // 对每组测试用例做相应处理 // 输出结果 printf("%s\n", output); } return 0; } ``` 请注意以上仅为模板示意,具体的算法设计还需紧密结合PAT 1036的具体要求来进行优化和完善。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值