pat 1036. Boys vs Girls (25)

1036. Boys vs Girls (25)

时间限制
400 ms
内存限制
65536 kB
代码长度限制
16000 B
判题程序
Standard
作者
CHEN, Yue

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
解:很简单的一道题,定义结构体,每个结构体变量,存储四个值,读取的时候得到男生最低分数对应的下标,女生对应的最高分数的下标,控制输出即可。

代码:

<span style="font-family:SimSun;font-size:10px;">#include<iostream>
#include<cstdlib>
#include<cstdio>
using namespace std;
struct students
{
    string name;
    string sex;
    string k;
    int grade;
};

int main()
{
    int n;
    while(scanf("%d",&n)==1)
    {
        students *stu=new students[n+1];
        int pp=0,grade1=101,qq=0,grade2=-1,g1=0,g2=0;
        for(int i=0;i<n;i++)
        {
            cin>>stu[i].name>>stu[i].sex>>stu[i].k>>stu[i].grade;
            if(stu[i].sex[0]=='M')
            {
                g1=1;
                if(stu[i].grade<grade1)
                {
                    grade1=stu[i].grade;
                    pp=i;
                }
            }
            if(stu[i].sex[0]=='F')
            {
                g2=1;
                if(stu[i].grade>grade2)
                {
                    grade2=stu[i].grade;
                    qq=i;
                }
            }
        }
        if(g2==0)
            cout<<"Absent"<<endl;
        else
            cout<<stu[qq].name<<" "<<stu[qq].k<<endl;
        if(g1==0)
            cout<<"Absent"<<endl;
        else
            cout<<stu[pp].name<<" "<<stu[pp].k<<endl;
        if(g1==0||g2==0)
            cout<<"NA"<<endl;
        else
            cout<<stu[qq].grade-stu[pp].grade<<endl;
    }
}</span>


### 关于 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的具体要求来进行优化和完善。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值