求助,70分
  • 板块学术版
  • 楼主liyunting2011
  • 当前回复0
  • 已保存回复0
  • 发布时间2024/6/15 17:03
  • 上次更新2024/6/15 19:29:53
查看原帖
求助,70分
802065
liyunting2011楼主2024/6/15 17:03

https://www.luogu.com.cn/problem/T241668

#include <iostream>
#include <string>
#include <vector>
#include <algorithm>

using namespace std;

bool isValidDate(string date) {
    int month = stoi(date.substr(0, 2));
    int day = stoi(date.substr(3, 2));

    if (month < 1 || month > 12) {
        return false;
    }

    if (day < 1 || day > (month == 2 ? 28 : 31)) {
        return false;
    }

    return true;
}

int minChangesToValidDate(string date) {
    int minChanges = 4;  // 最多更改4位数字

    // 遍历所有可能的数字更改方式
    for (int i = 0; i < 4; ++i) {
        for (char c = '0'; c <= '9'; ++c) {
            string newDate = date;
            newDate[i] = c;

            if (isValidDate(newDate)) {
                minChanges = min(minChanges, 1);  // 只更改了一位数字
                break;
            }
        }
    }

    // 尝试更改两位数字
    for (int i = 0; i < 3; ++i) {
        for (char c1 = '0'; c1 <= '9'; ++c1) {
            for (char c2 = '0'; c2 <= '9'; ++c2) {
                string newDate = date;
                newDate[i] = c1;
                newDate[i + 1] = c2;

                if (isValidDate(newDate)) {
                    minChanges = min(minChanges, 2);  // 更改了两位数字
                    break;
                }
            }
            if (minChanges == 2) {
                break;
            }
        }
    }

    // 尝试更改三位或四位数字(实际上不需要,因为更改两位数字已经足够)
    // 这里不实现,因为根据题目描述和输入输出样例,更改两位数字就足够了

    return minChanges;
}

int main() {
    string date;
    cin >> date;

    int result = minChangesToValidDate(date);
    cout << result << endl;

    return 0;
}
2024/6/15 17:03
加载中...