会好799 2023-04-08 09:27 采纳率: 100%
浏览 67
已结题

对于统计日期的c++问题

小蓝现在有一个长度为 100 的数组,数组中的每个元素的值都在 0 到 9 的 范围之内。数组中的元素从左至右如下所示: 5 6 8 6 9 1 6 1 2 4 9 1 9 8 2 3 6 4 7 7 5 9 5 0 3 8 7 5 8 1 5 8 6 1 8 3 0 3 7 9 2 7 0 5 8 8 5 7 0 9 9 1 9 4 4 6 8 6 3 3 8 5 1 6 3 4 6 7 0 7 8 2 7 6 8 9 5 6 5 6 1 4 0 1 0 0 9 4 8 0 9 1 2 8 5 0 2 5 3 3 现在他想要从这个数组中寻找一些满足以下条件的子序列:

  1. 子序列的长度为 8;
  2. 这个子序列可以按照下标顺序组成一个 格式的日期,并且 要求这个日期是 2023 年中的某一天的日期,例如 20230902,20231223。 y 表示年份,m 表示月份,d 表示天数,当月份或者天数的长度只 有一位时需要一个前导零补充。
    请你帮小蓝计算下按上述条件一共能找到多少个不同 的 2023 年的日期。 对于相同的日期只需要统计一次即可。
  • 写回答

2条回答 默认 最新

  • 创意程序员 2023-04-08 10:13
    关注

    可以通过枚举所有可能的子序列来解决这个问题。先通过循环来枚举所有可能的子序列,然后检查每个子序列是否满足条件。如果满足条件,则将其添加到一个集合中(此算法使用set,不会出现重复项),以便统计不同的日期数。最后,返回集合中不同日期的数量。

    #include <iostream>
    #include <set>
    #include <string>
    
    using namespace std;
    
    int main() {
        int a[100] = {5, 6, 8, 6, 9 // ...
                      };
        set<string> dates;
        for (int i = 0; i < sizeof(a) / sizeof(int) -7; i++) {
            string date = to_string(a[i]) + to_string(a[i+1]) + to_string(a[i+2]) + to_string(a[i+3]) + to_string(a[i+4]) + to_string(a[i+5]) + to_string(a[i+6]) + to_string(a[i+7]);
            if (date >= "20230101" && date <= "20231231") {
                string year = date.substr(0,4);
                string month = date.substr(4,2);
                string day = date.substr(6);
                dates.insert(year + "-" + month + "-" + day);
            }
        }
        cout << "不同日期数:" << dates.size() << endl;
        return 0;
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 4月16日
  • 已采纳回答 4月8日
  • 创建了问题 4月8日

悬赏问题

  • ¥20 wordpress如何限制ip访问频率
  • ¥15 自研小游戏,需要后台服务器存储用户数据关卡配置等数据
  • ¥15 请求解答odoo17外发加工某工序的实操方法
  • ¥20 IDEA ssm项目 跳转页面报错500
  • ¥20 系统直接进入应急模式了,请教一下,人要裂开了
  • ¥15 页面初次加载时,JS调用对象可以调用成功,但是一旦跳转到另一个页面,再跳转回来后这个对象就显示undefind了,调用也调用不了了,什么原因?
  • ¥15 来个厉害的程序开发的,安排点活给你做
  • ¥15 rexroth indramotion MTX micro系统轴耦合编程
  • ¥100 springboot2.7.x 整合 sharding 的问题
  • ¥15 如何通过命令行操作统信360安全浏览器?