PTA团队程序设计天梯赛-练习集L1-47装睡

L1-047 装睡 (10 分)(有更新,在文章末尾)

你永远叫不醒一个装睡的人 —— 但是通过分析一个人的呼吸频率和脉搏,你可以发现谁在装睡!医生告诉我们,正常人睡眠时的呼吸频率是每分钟15-20次,脉搏是每分钟50-70次。下面给定一系列人的呼吸频率与脉搏,请你找出他们中间有可能在装睡的人,即至少一项指标不在正常范围内的人。

输入格式:

输入在第一行给出一个正整数N(≤10)。随后N行,每行给出一个人的名字(仅由英文字母组成的、长度不超过3个字符的串)、其呼吸频率和脉搏(均为不超过100的正整数)。

输出格式:

按照输入顺序检查每个人,如果其至少一项指标不在正常范围内,则输出其名字,每个名字占一行。

输入样例:

4
Amy 15 70
Tom 14 60
Joe 18 50
Zoe 21 71

输出样例:

Tom
Zoe

关于这道题,从题目上来看不难,做起来,也不难。我在这利用的是结构体去做的。在刚开始写代码的过程中我构造的结构体是这样的:

typedef struct
{
    char name[4];//姓名
    int huxirate;//呼吸频率
    int pulse;//脉搏
}people;

但是我在写到如何去判断谁距离大家平均数的一半近的时候我卡住了,总不可能用循环再一个一个去减,然后在用一个循环去判断大小吧。于是我想到了在结构体中再增加一个成员

typedef struct
{
    char name[4];//姓名
    int huxirate;//呼吸频率
    int pulse;//脉搏
    int state;//状态,0表示装睡,1表示真睡
}people;

然后这样就好做很多了,直接在输入之后就立马判断是否在装睡了。
下面是我全部代码及注释:

#include
typedef struct
{
    char name[4];//姓名
    int huxirate;//呼吸频率
    int pulse;//脉搏
    int state;//状态,0表示装睡,1表示真睡
}people;
int main()
{
    int n,i;
    people t[10];
    scanf("%d",&n);
    for(i=0;i<n;i++)
    {
        scanf("%s %d %d",&t[i].name,&t[i].huxirate,&t[i].pulse);//输入信息
        if(t[i].huxirate<15||t[i].huxirate>20||t[i].pulse<50||t[i].pulse>70)
        {//判断是否在装睡
            t[i].state=0;
        }
        else
        {
            t[i].state=1;
        }
    }
    for(i=0;i<n;i++)
    {
        if(!t[i].state)
        {//如果是装睡就输出
            printf("%s\n",t[i].name);
        }
    }
    return 0;
}

----------------------------我是一个毫无感情的分割线------------------------------------------------------

2020.1.18代码更新,用了map,比较简单

#include 
#include 
#include 
using namespace std;
//@date: 2020-01-18 13:41:59
//@state:OK

map<int,string> order;//记录顺序
map<string,int> hx;//记录呼吸频率
map<string,int> pulse;//记录脉搏

int main()
{
    int n,a,b;
    string s;
    cin>>n;
    for(int i=0;i<n;i++)
    {
        cin>>s>>a>>b;
        //根据下标记录名字
        order[i]=s;
        //根据名字记录对应值
        hx[s]=a;
        pulse[s]=b;
    }
    for(int i=0;i<n;i++)
    {
        //判断
        if(hx[order[i]]<15||hx[order[i]]>20||pulse[order[i]]<50||pulse[order[i]]>70)
            cout<<order[i]<<endl;
    }
    return 0;
}

你可能感兴趣的:(刷题)