算法训练 新生舞会  
时间限制:1.0s   内存限制:512.0MB
    
问题描述
  新生舞会开始了。n名新生每人有三个属性:姓名、学号、性别。其中,姓名用长度不超过20的仅由大小写字母构成的字符串表示,学号用长度不超过10的仅由数字构成的字符串表示,性别用一个大写字符‘F’或‘M’表示。任意两人的姓名、学号均互不相同。换言之,每个人可被其姓名或学号唯一确定。给出m对两人的信息(姓名或学号),判断他们是否能共舞。两人能共舞的充要条件为两人性别相异。

输入
  第一行一个整数n(2<=n<=1000),表示学生人数。接下来的n行每行依次包含一名新生的姓名、学号、性别,分别用一个空格隔开。
  之后的一行是一个整数m(1<=m<=1000),表示询问的数目。接着的m行每行包含两个信息(姓名或学号),保证两个信息不属于同一人,中间用一个空格隔开。

输出
  对于每个询问输出一行,如果两人可以共舞,输出一个大写字母‘Y’,否则输出一个大写字母‘N’。

样例输入
  4
  John 10 M
  Jack 11 M
  Kate 20 F
  Jim 21 M
  3
  John 11
  20 Jack
  Jim Jack

样例输出
  N
  Y
  N

提示
  可以把名字和学号都当成字符串处理。可以按以下流程实现。

  #include<iostream>
  #include<cstring>
  using namespace std;

  struct tstudent
  {
  char name[21];
  char num[21];
  char sex;
  };

  void readdata(tstudent student[], int n)
  {
输入N个学生的信息
  }

  int findstudent(tstudent student[], int n, char* data)
  {
  if (data == NULL) return -1;

判断是否有某个学生的学号或名字等于data,如果有,函数返回该学生在student数组中的序号,否则返回-1
  }

  void solve(tstudent student[], int n, int m)
  {
  char x[21], y[21];
  for (int i=0; i<m; i++) {
输入两个人的信息X、Y。通过调用findstudent函数判断这两个人能否成为舞伴
  }
  }

  int main()
  {
  int n, m;
  tstudent student[1010];

  cin>>n;

  readdata(student, n);
  cin>>m;
  solve(student, n, m);
  }

 
作者注释:挺久没有做“结构体排序”的题目了,都手生了。
 #include<stdio.h>
#include<string.h>
/*定义学生信息的结构体*/
typedef struct Student{
char name[];
char num[];
char sex;
}stu;
int m,n;
stu st[];
/*
strcmp函数:
比较两个字符串设这两个字符串为str1,str2:若str1==str2,则返回零.
*/
int findbynum(char num[]){
for(int i=;i<n;i++){
if(strcmp(st[i].num,num)==){
if(st[i].sex == 'M') return ;
else return ;
}
}
}
int findbyname(char name[]){
for(int i=;i<n;i++){
if(strcmp(st[i].name,name)==){
if(st[i].sex == 'M') return ;
else return ;
}
}
}
/*
输入两个人的信息x、y:
通过调用findbynum、findbyname函数判断这两个人能否成为舞伴
*/
void solve(){
scanf("%d",&m);
char x[],y[];
/*输入两个人的信息x、y,先用x、y保存*/
for(int i=;i<m;i++){
scanf("%s%s",x,y); int judgex,judgey;//标记
if(x[]<=){//为数字
judgex = findbynum(x);//参数为x数组
}else{//为字母
judgex = findbyname(x);//参数为x数组
} if(y[]<=){//为数字
judgey = findbynum(y);//参数为y数组
}else{//为字母
judgey = findbyname(y);//参数为y数组
} if(judgex != judgey) printf("Y\n");//若不能配对
else printf("N\n");
}
}
int main(){
scanf("%d",&n);
for(int i=;i<n;i++){//输入N个学生的信息
scanf("%s%s %c",st[i].name,st[i].num,&st[i].sex);
}
solve();
return ;
}

C语言 · 新生舞会的更多相关文章

  1. bzoj4819 [Sdoi2017]新生舞会

    Description 学校组织了一次新生舞会,Cathy作为经验丰富的老学姐,负责为同学们安排舞伴.有n个男生和n个女生参加舞会买一个男生和一个女生一起跳舞,互为舞伴.Cathy收集了这些同学之间的 ...

  2. bzoj 4819: [Sdoi2017]新生舞会

    Description 学校组织了一次新生舞会,Cathy作为经验丰富的老学姐,负责为同学们安排舞伴.有n个男生和n个女生参加舞会 买一个男生和一个女生一起跳舞,互为舞伴.Cathy收集了这些同学之间 ...

  3. [Sdoi2017]新生舞会 [01分数规划 二分图最大权匹配]

    [Sdoi2017]新生舞会 题意:沙茶01分数规划 貌似\(*10^7\)变成整数更科学 #include <iostream> #include <cstdio> #inc ...

  4. [SDOI2017]新生舞会

    Description 学校组织了一次新生舞会,Cathy作为经验丰富的老学姐,负责为同学们安排舞伴.有n个男生和n个女生参加舞会 买一个男生和一个女生一起跳舞,互为舞伴.Cathy收集了这些同学之间 ...

  5. BZOJ_4819_[Sdoi2017]新生舞会_01分数规划+费用流

    BZOJ_4819_[Sdoi2017]新生舞会_01分数规划+费用流 Description 学校组织了一次新生舞会,Cathy作为经验丰富的老学姐,负责为同学们安排舞伴.有n个男生和n个女生参加舞 ...

  6. [BZOJ 4819] [SDOI 2017] 新生舞会

    Description 学校组织了一次新生舞会,Cathy作为经验丰富的老学姐,负责为同学们安排舞伴. 有 \(n\) 个男生和 \(n\) 个女生参加舞会买一个男生和一个女生一起跳舞,互为舞伴. C ...

  7. bzoj5110: [CodePlus2017]Yazid 的新生舞会

    Description Yazid有一个长度为n的序列A,下标从1至n.显然地,这个序列共有n(n+1)/2个子区间.对于任意一个子区间[l,r] ,如果该子区间内的众数在该子区间的出现次数严格大于( ...

  8. 洛谷 P3705 [SDOI2017]新生舞会 解题报告

    P3705 [SDOI2017]新生舞会 题目描述 学校组织了一次新生舞会,\(Cathy\)作为经验丰富的老学姐,负责为同学们安排舞伴. 有\(n\)个男生和\(n\)个女生参加舞会买一个男生和一个 ...

  9. LibreOJ 2003. 「SDOI2017」新生舞会 基础01分数规划 最大权匹配

    #2003. 「SDOI2017」新生舞会 内存限制:256 MiB时间限制:1500 ms标准输入输出 题目类型:传统评测方式:文本比较 上传者: 匿名 提交提交记录统计讨论测试数据   题目描述 ...

随机推荐

  1. python开发者框架套件总结: package 包 frameworks

    python开发者的package 包 框架套件总结: frameworks     开发环境: anaconda pycharm django awesome-django : 介绍 django ...

  2. root用户Linux 环境变量的配置解决(-bash: jps: command not found)有关问题

    可以写成:$JAVA_HOME/bin 3. source /root/.bash_profile 发现 jps 等命令运行正常了

  3. Activity 变成对话框,然后再隐藏?

    由于继续需要做一些无感操控的工作,之前也记录了下利用悬浮窗的方法.今天突然发现原来activity可以直接嗯嗯嗯啊. 首先我在AndroidManifest里给activity添加了如下一行: and ...

  4. Knockout: 使用CSS绑定和event的blur失去焦点事件, 给未通过校验的输入框添加红色边框突出显示.

    目的:使用knockout提供的机制实现输入框失去焦点后的校验工作,并使用CSS绑定给未通过校验的输入框添加红色边框突出显示. 步骤: 先在htm中添加.error的css样式, 并在输入框中的dat ...

  5. 基础002_V7-CLB

    一.综述 参考ug474.pdf: 7系列中,一个CLB包含两个slice: 每个CLB的资源: CLB可配置的主要功能: 二.主要功能 LUT是基本单元,例如选择器assign muxout =  ...

  6. centOS7 安装man中文手册

    [root@localhost ~]# yum list | grep man.*zh -.el7 base [root@localhost ~]# yum -y install man-pages- ...

  7. ios开发-引导页实现

    源码:http://files.cnblogs.com/ios8/%5Bcode4app.com%5DIntroductionTutorialView_10843.zip 可以看看demo,很简单,我 ...

  8. 转:浅谈char类型范围

    在 C 语言中, signed char 类型的范围为 -128~127,每本教科书上也这么写,但是没有哪一本书上(包括老师)也不会给你为什么是 -128~127,这个问题貌似看起来也很简单容易, 以 ...

  9. Spring Boot中扩展XML请求和响应的支持

    在Spring Boot中,我们大多时候都只提到和用到了针对HTML和JSON格式的请求与响应处理.那么对于XML格式的请求要如何快速的在Controller中包装成对象,以及如何以XML的格式返回一 ...

  10. 基于OCS实现高速缓存

    OCS简介 OCS( Open Cache Service)为分布式高速缓存服务,主要实现热点数据的快速响应: OCS支持Key/Value的数据结构,兼容memcachebinary protoco ...