*****1112: 4004 开门人和关门人

这个题我又是一个愚蠢的人

我应该看完题 再思考用什么做的

就像我总不能基本上把无聊的前奏写了一半,然后发现,哦,原来用结构体会超级简单。

题目描述

每天第一个到机房的人要把门打开,最后一个离开的人要把门关好。现有一堆杂乱的机房签到、签离记录,请根据记录找出当天开门和关门的人。

输入

测试输入的第一行给出记录的总天数N (N > 0 )。下面列出了N天的记录。每天的记录在第一行给出记录的条目数M ( M > 0 ),下面是M行,每行的格式为:
证件号码 签到时间 签离时间
其中时间按“小时:分钟:秒钟”(各占2位)给出,证件号码是长度不超过15的字符串。

输出

对每一天的记录输出1行,即当天开门和关门人的证件号码,中间用1空格分隔。
注意:在裁判的标准测试输入中,所有记录保证完整,每个人的签到时间在签离时间之前,且没有多人同时签到或者签离的情况。

样例输入 复制

3
1
ME3021112225321 00:00:00 23:59:59
2
EE301218 08:05:35 20:56:35
MA301134 12:35:45 21:40:42
3
CS301111 15:30:28 17:00:10
SC3021234 08:00:00 11:25:25
CS301133 21:45:00 21:58:40

样例输出 复制

ME3021112225321 ME3021112225321
EE301218 MA301134
SC3021234 CS301133

绿植 写这个破烂程序 因为自己读错题了,写了半个小时了啊啊啊啊呜呜呜

为啥这个程序的第二三行 只能出的来gm人啊

通过检测,发现是km出现了问题,可是我的gm是复制的km啊,究竟是怎么回事///

#include<stdio.h>
#include<string.h>
int main()
{
    int n;
    char zj[20];
    int hour,min,sec;
    int mhour,mmin,msec;
    char km[20];
    char gm[20];
    char c;
    int max_hour,min_hour;
    int max_min,min_min;
    int max_sec,min_sec;
    while(scanf("%d",&n)!=EOF)
    {
        while(n--)
        {
           
            memset(zj,0,sizeof(zj));
            int day;
            scanf("%d",&day);
            max_hour=max_min=max_sec=-1;
            min_hour=min_min=min_sec=10000;
            
            for(int i=0;i<day;i++)
            {
                memset(km,0,sizeof(km));
                memset(gm,0,sizeof(gm));
                scanf("%s %02d%c%02d%c%02d %02d%c%02d%c%02d",zj,&hour,&c,&min,&c,&sec,&mhour,&c,&mmin,&c,&msec);
                if(hour<min_hour)
                {
                    strcpy(km,zj);
                    min_hour=hour;
                    min_min=min;
                    min_sec=sec;
                }
                 if(hour==min_hour)
                {
                    if(min<min_min)
                    {
                        strcpy(km,zj);
                        min_min=min;
                        min_sec=sec;
                    }
                }
                if(hour==min_hour)
                {
                    if(min==min_min)
                    {
                       if(sec<min_sec)
                       {
                           strcpy(km,zj);
                           min_sec=sec;
                       }
                    }
                }
                
                if(hour>max_hour)
                {
                    strcpy(gm,zj);
                    max_hour=hour;
                    max_min=min;
                    max_sec=sec;
                }
                if(hour==max_hour)
                {
                    if(min>max_min)
                    {
                        strcpy(gm,zj);
                        max_min=min;
                        max_sec=sec;
                    }
                }
                if(hour==max_hour)
                {
                    if(min==max_min)
                    {
                       if(sec>min_sec)
                       {
                           strcpy(gm,zj);
                            max_sec=sec;
                       }
                    }
                }
                
            }
            printf("%s %s\n",km,gm);
        }
    }
}

  别问了 这道题 问就是崩溃 各种找程序 结果找到的都是错的。

经历一个半小时之后,没关系,正常的,别放弃!!!!!!!!

找到了一个正确的程序,现在让我们来分析一下它的思路叭

这个题所有的都采用的是字符串的比较,可以说是考察的知识点是非常简单的。

但是不要过于焦虑,至少我们已经学会了这道题,也学会了一个新思路,也就是时间也是可以用字符串来比较的。

#include <stdio.h>
#include <string.h>

int main()
{
    int n, t;
    scanf("%d", &t);
    while(t--)
    {
        scanf("%d", &n);
        char max2[10] = "00:00:00", max1[10] = "23:59:59";
        char t1[10], t2[10], num1[30], num2[30], num[30];
//num1 开门人 num2 关门人
        getchar();
        for(int i = 0; i < n; i++)
        {
            scanf("%s %s %s", num, t1, t2);
            if(strcmp(t1, max1) <= 0)
            {
                strcpy(num1, num);
                strcpy(max1, t1);
            }
            if(strcmp(t2, max2) >= 0)
            {
                strcpy(num2, num);
                strcpy(max2, t2);
            };
        }
        printf("%s %s\n", num1, num2);    
    }
    return 0;
}

看下考察的知识点都有哪些

  1. 字符串操作函数strcmp和strcpy

strcmp是比较两个字符串大小的函数,

原型为:int strcmp(const char *str1, const char *str2)

它可以比较两个字符串是否相等,并返回以下三种值之一:

  • 如果str1等于str2,则返回0
  • 如果str1小于str2,则返回一个负整数
  • 如果str1大于str2,则返回一个正整数

注意,如果使用strcmp比较两个字符串的大小,必须确保这两个字符串都是以\0结尾的。

strcpy是将一个字符串复制到另外一个字符串中的函数,原型为:char *strcpy(char *dest, const char *src)。它将源字符串src(以\0结尾)复制到目标字符串dest中,并返回指向dest字符串的指针。

  1. 字符串数组的定义和使用

在C语言中,字符串通常用字符数组来表示。例如,要定义一个长度为10的字符串数组,可以使用如下语句:char str[10];。在定义时,必须指定字符数组的长度。然后,就可以通过下标和循环遍历的方式对字符串进行操作,例如赋值、拷贝、比较等。配合字符串操作函数,可以实现各种字符串处理功能。需要注意的是,在定义字符串数组时,必须留出\0结束符所需的空间。例如,若要存储一个长度为3的字符串,字符数组应当至少分配4个字节的空间,前3个字节存储字符串内容,最后一个字节存储\0结束符。

 

然后对这道题的话,还是建议有一下结构体的使用。 下面我将写一个使用了结构体的程序。 

 

#include<stdio.h>
#include<string.h>
struct cc{
    char name[20];
    char in[20];
    char out[20];
} early,last,sb;
int main()
{
    int n;
      int m;
    while(scanf("%d",&n)!=EOF)
    {
       for(int j=0;j<n;j++)
        {
          
        scanf("%d",&m);
        for(int i=0;i<m;i++)
        {
            scanf("%s %s %s",&sb.name,&sb.in,&sb.out);
            if(strcmp(early.in,sb.in)>0||i==0)
            {
                strcpy(early.in,sb.in);
                strcpy(early.name,sb.name);
            }
            if(strcmp(last.out,sb.out)<0||i==0)
            {
                strcpy(last.out,sb.out);
                strcpy(last.name,sb.name);
            }
            
        }
        printf("%s %s\n",early.name,last.name);
        }
        
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/27806.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

上课补充的知识

题目 char类型的默认值是\u0000 数组的创建方式 数组的遍历 遍历:从头到尾,依次访问数组每一个位置,获取每一个位置的元素.形式如下: 我们通过数组的下标操作数组,所以for循环变量操作的也是数组下标 开始:开始下标0 结束:结束下标length-1 如何变化: 语法&#xff1a; for…

软考A计划-系统架构师-学习笔记-第二弹

点击跳转专栏>Unity3D特效百例点击跳转专栏>案例项目实战源码点击跳转专栏>游戏脚本-辅助自动化点击跳转专栏>Android控件全解手册点击跳转专栏>Scratch编程案例点击跳转>软考全系列 &#x1f449;关于作者 专注于Android/Unity和各种游戏开发技巧&#xff…

【java】IO流

IO流 原理 分类 字节流与字符流 节点流与包装流 Java IO详解&#xff08;五)------包装流 - YSOcean - 博客园 (cnblogs.com)JAVA I/O流 字符流和字节流、节点流和处理流(包装流、过滤流)、缓冲流_过滤流和缓冲流,字节流的关系_X-Dragon烟雨任平生的博客-CSDN博客 字符流 i…

Redis常见问题、各个分布式锁优缺点-05

Redis集群为什么至少需要三个master节点&#xff0c;并且推荐节点数为奇数&#xff1f; 因为新master的选举需要大于半数的集群master节点同意才能选举成功&#xff0c;如果只有两个master节点&#xff0c;当其中一个挂了&#xff0c;是达不到选举新master的条件的。 奇数个ma…

【Linux】 -- TCP协议 (一)

TCP协议 Tcp协议可靠性冯诺依曼体系结构 TCP的协议格式序号与确认序号窗口大小六个标志位 确认应答机制 &#xff08;ACK&#xff09;超时重传机制连接管理机制 Tcp协议 TCP全称为 “传输控制协议”&#xff08;Transmission Control Protocol&#xff09; TCP协议被广泛应用…

C语言---形参所导致的段错误

前言 今天刷B站&#xff0c;无意之间看到一个宣称90%人都会错的嵌入式面试题。感兴趣就看了一下。卡了十多分钟才想明白&#xff0c;只是一个小知识点&#xff0c;但还是分享一下。 题目 #include <stdio.h> #include <stdlib.h> #include <string.h>void g…

信道编码的基本概念

本专栏包含信息论与编码的核心知识&#xff0c;按知识点组织&#xff0c;可作为教学或学习的参考。markdown版本已归档至【Github仓库&#xff1a;https://github.com/timerring/information-theory 】或者公众号【AIShareLab】回复 信息论 获取。 文章目录 信道编码信道编码的…

Spring,注解开发

Spring是一个轻量级的控制反转&#xff08;IOC&#xff09;和面向切面编程&#xff08;AOP&#xff09;的框架 1、组成 spring七大模块详解 2、IOC理论推导 传统的开发 (pojo层、DAO层和业务层&#xff09; &#xff08;1&#xff09;UserDao &#xff08;2) UserDaoImpl (3)…

CSS基础学习--5 background背景

一、介绍&#xff1a; CSS 背景属性用于定义HTML元素的背景。 CSS 属性定义背景效果: background-color 背景颜色background-image 背景图片background-repeatbackground-attachmentbackground-position 二、属性 2.1、background-color 属性定义了元素的背景颜色 <s…

位图以及布隆过滤器

本文主要讲解哈希思想的实际应用&#xff0c;位图和布隆过滤器。 位图 讲解位图之前我们先来解答这样一道腾讯的面试题 给40亿个不重复的无符号整数&#xff0c;没排过序。给一个无符号整数&#xff0c;如何快速判断一个数是否在这40亿个数中。【腾讯】 很多人立马就想到了用…

【零基础学机器学习 5】机器学习中的分类:什么是分类以及分类模型

&#x1f468;‍&#x1f4bb; 作者简介&#xff1a;程序员半夏 , 一名全栈程序员&#xff0c;擅长使用各种编程语言和框架&#xff0c;如JavaScript、React、Node.js、Java、Python、Django、MySQL等.专注于大前端与后端的硬核干货分享,同时是一个随缘更新的UP主. 你可以在各个…

Shell编程循环语句(for、while、until)

目录 一、for 循环 1.用法和特点 2.执行指定次数 3.遍历和迭代 &#xff08;1&#xff09;遍历 &#xff08;2&#xff09;迭代 4.操作实例 二、 while 循环 1.用法和特点 2.操作实例 三、until 循环 1.用法和特点 2.操作实例 一、for 循环 1.用法和特点 读取不…

【动态规划专栏】-- 01 背包问题 -- 动态规划经典题型

目录 背包问题概述 01 背包问题 01背包⭐⭐ 【算法原理】 第一问 第二问 C 算法代码 复杂度分析 【空间优化 - 滚动数组】 C 算法代码 复杂度分析 分割等和子集⭐⭐ 【算法原理】 对于类01背包问题 C 算法代码 【空间优化 - 滚动数组】 C 算法代码 目标和…

常见网络服务器并发模型

近些年&#xff0c;随着互联网的大发展&#xff0c;高并发服务器技术也快速进步&#xff0c;从简单的循环服务器模型处理少量网络并发请求&#xff0c;演进到解决C10K&#xff0c;C10M问题的高并发服务器模型。本文主要以TCP为例&#xff0c;总结了几种常见的网络服务器模型的实…

Java注解的入门学习

一、概念 Java注解是一种元数据形式&#xff0c;可以被添加到Java代码中的各种元素&#xff08;类、方法、字段等&#xff09;上&#xff0c;以提供关于这些元素的额外信息。注解是在Java 5中引入的一项特性&#xff0c;它们不直接影响代码的执行&#xff0c;而是提供了一种机…

本周大新闻|Vision Pro头显重磅发布;苹果收购AR厂商Mira

本周XR大新闻&#xff0c;上周Quest 3发布之后&#xff0c;本周苹果MR头显Vision Pro正式发布&#xff0c;也是本周AR/VR新闻的重头戏。 ​AR方面&#xff0c;苹果发布VST头显Vision Pro&#xff08;虽然本质是台VR&#xff0c;但以AR场景为核心&#xff09;以及visionOS&…

【三、网络配置与系统管理】

1 网络配置 ifconfig 显示网络接口的配置信息 [rootredis100 ~]# ifconfig ens33: flags4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500inet 192.168.10.100 netmask 255.255.255.0 broadcast 192.168.10.255inet6 fe80::f5c3:6a96:fe05:1965 prefixlen 64 scop…

如何使用Docker实现分布式Web自动化!

1、前言 顺着docker的发展&#xff0c;很多测试的同学也已经在测试工作上使用docker作为环境基础去进行一些自动化测试&#xff0c;这篇文章主要讲述在docker中使用浏览器进行自动化测试如果可以实现可视化&#xff0c;同时可以对浏览器进行相关的操作。 如果你想学习自动化测…

畅聊趣坊项目测试报告

文章目录 项目背景项目功能测试计划与设计功能测试自动化测试 测试结果功能测试结果UI自动化测试结果 项目背景 在浏览网站时&#xff0c;发现好多网站开放出聊天的窗口&#xff0c;我们一发送消息就会收到一条消息&#xff0c;好奇这个功能是怎么实现的&#xff0c;最后查阅资…

cmake 基本使用

目录 CMake都有什么? 使用cmake一般流程为&#xff1a; 1 生成构建系统 使用命令在build外编译代码: cmake基本语法 指定使用最低版本的cmake 指定项目名称 指定生成目标文件的名称 指定C版本 cmake配置文件使用 cmake配置文件生成头文件 版本号定义方法一: 版本号定…