PAT 1036 Boys vs Girls [查找最值]

本文介绍了一种算法,用于分析学生数据库中男性和女性学生的最高和最低成绩,并计算两者之间的差距。通过输入包含学生姓名、性别、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 namegenderID 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 grade​F​​−grade​M​​. 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

我的代码: 

#include<stdio.h>
#include<stdlib.h>
 
struct node
{
	char name[15];
	char id[15];
	char gender;
	int grade;
}stu,low,high;

int main()
{
	int i,n;
	//设置成[0,100]范围外的数便于判断是否存在Absent的情况 
	low.grade = 105;high.grade = -1;
	scanf("%d",&n);
	for(i=0;i<n;i++)
	{
		scanf("%s %c %s %d",&stu.name,&stu.gender,&stu.id,&stu.grade);
		if(stu.gender=='F'&&stu.grade>high.grade)  high = stu;
		if(stu.gender=='M'&&stu.grade<low.grade)  low = stu;
	}
	int flag = 0;
	if(high.grade!=-1) printf("%s %s\n",high.name,high.id);
	else {printf("Absent\n");flag = 1;}
	if(low.grade!=105) printf("%s %s\n",low.name,low.id);
	else {printf("Absent\n");flag = 1;}
	if(flag) printf("NA");
	else printf("%d",abs(high.grade-low.grade));
	//abs的头文件居然是<stdlib.h>我还以为是<math.h> QAQ
}

 

### 关于 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、付费专栏及课程。

余额充值