静文·红·精灵 2024-03-25 21:10 采纳率: 50%
浏览 4
已结题

如何计算实际停留时间(标签-算法)

算法题目:统计酒店住户实际入住情况,已知用户入住时,酒店会提供房卡,可凭借房卡进出酒店,进入酒店是必须提供房卡,出酒店提供房卡或身份证号
得到的基础数据如下表所示,

求:
1)在酒店停留时间超过2天次数,
2)在酒店停留时间存在超过2天的房卡

身份证号卡号出入时间出入标识
210726188810101212100120230101 12:12:00
21072618881010121220230102 12:12:00
210726188810101212100120230301 12:12:00
21072618881010121220230303 12:12:00
210726188810101212100220230401 12:12:00
21072618881010121220230405 12:12:00

注意,出酒店时房卡卡号为空,不为空时我能理解,但是出时可能为空我就不会计算了

  • 写回答

4条回答 默认 最新

  • 静文·红·精灵 2024-06-21 17:40
    关注

    出入境表:
    护照号 签证号 出入时间 出入标识
    001 1001 20230101 入
    001 20230210 出
    001 20230220 入
    001 20230221 出
    001 20230226 入
    001 1001 20230227 入
    001 1001 20230301 入
    001 20230310 出
    001 20230311 出
    001 1002 20230401 入
    001 20230405 出
    001 1004 20230101 入
    001 20230102 出
    001 1004 20230301 入
    001 20230301 出
    001 1005 20230401 入
    001 20230504 出

    签证表

    护照号 签证号 签证停留期限
    001 1001 30
    001 1002 30
    001 1003 30
    001 1004 30
    001 1005 30

    为了计算境内实际停留期超过签证停留期80%天数的持证次数,我们需要首先处理出入境记录,将其按照护照号和入离时间排序,并且去除单个入境或出境的无效记录。接下来,我们将处理后的出入境记录与签证表结合,以计算出每个签证的实际停留天数,并与签证停留期限进行比较。

    以下是详细的步骤描述:

    步骤一:排序和去除无效记录
    首先,我们需要将出入境记录按照护照号和入离时间排序。然后,我们遍历排序后的记录,去除单个入境或出境的无效记录。在这个例子中,我们可以观察到如下无效记录:

    护照号001,签证号1003的签证在出入境记录中没有出现,因此我们可以忽略它。
    护照号001,签证号1001的第二条出境记录(20230227)没有匹配的出境记录,因此它也是无效的。
    护照号001,签证号1001的第三条出境记录(20230311)没有匹配的入境记录,因此它也是无效的。
    处理后的出入境记录如下:

    护照号 签证号 出入时间 出入标识
    001 1001 20230101 入
    001 20230210 出
    001 1001 20230301 入
    001 20230310 出
    001 1002 20230401 入
    001 20230405 出
    001 1004 20230101 入
    001 20230102 出
    001 1004 20230301 入
    001 20230301 出
    001 1005 20230401 入
    001 20230504 出
    步骤二:计算实际停留天数
    接下来,我们遍历处理后的出入境记录,并为每个签证计算实际停留天数。对于每个入境记录,我们找到对应的出境记录,并计算两个时间之间的天数差,即为此次入境的实际停留天数。

    例如,对于签证号1001的第一次入境(20230101)和出境(20230210),实际停留天数为:20230210 - 20230101 + 1 = 41天。

    对于签证号1001的第二次入境(20230301)和出境(20230310),实际停留天数为:20230310 - 20230301 + 1 = 10天。

    我们按照这样的方法计算所有签证的实际停留天数。

    步骤三:比较实际停留天数与签证停留期限
    现在,我们有了每个签证的实际停留天数,接下来我们需要将这些天数与签证表中的签证停留期限进行比较。在这个例子中,签证表告诉我们:

    护照号 签证号 签证停留期限
    001 1001 30
    001 1002 30
    001 1003 30
    001 1004 30
    001 1005 30
    对于签证号1001,第一次入境的实际停留天数是41天,超过了签证停留期限30天的80%(即24天)。第二次入境的实际停留天数是10天,没有超过80%的阈值。

    因此,我们统计所有超过80%阈值的签证次数。在这个例子中,只有签证号1001的第一次入境满足条件,所以持证次数为1。

    注意事项
    如果出境记录中签证号字段为空,但可以通过护照号和其他信息(如入离时间)与入境记录匹配,则仍应视为有效记录。
    如果存在多次入境和出境,需要分别计算每次入境的实际停留天数,并检查是否超过签证停留期限的80%。
    如果某个签证的实际停留天数在某次入境时超过了80%的阈值,即使之后的入境没有超过,也仍然算作一次满足条件的持证次数。因为题目要求的是“超过签证停留期80%天数的持证次数”,而不是“每次入境都超过80%的持证次数”。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

问题事件

  • 系统已结题 6月29日
  • 已采纳回答 6月21日
  • 修改了问题 3月25日
  • 修改了问题 3月25日
  • 展开全部