C++ 判断日期是否合法 自定义check_valid()函数

在一些算法题中,我们经常遇到日期问题,不可避免判断日期是否合法
判断日期是否合法的思路:

  1. 判断月是否合法
  2. 判断日是否为0
  3. 分别判断月份是否为2时的日是否合法
  4. 上述1 ~ 3有一个不合法,即返回false;上述1 ~ 3均合法,最后返回true

下面给出了判断日期是否合法的C++的代码描述:
bool check_valid(int y, int m, int d); (y表示年,m表示月,d表示日)

int days[] = {-1, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};

bool check_valid(int y, int m, int d)	// 判断日期是否合法
{
    if (!m || m > 12) return false;
    if (!d) return false;
    if (m != 2)
    {
        if (d > days[m]) return false;
    }
    else
    {
        int leap = (y % 400 == 0) || (y % 4 == 0 && y % 100 != 0);
        if (d > 28 + leap) return false;
    }
    return true;
}

测试:

#include <iostream>

using namespace std;

int days[] = {-1, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};

bool check_valid(int y, int m, int d)
{
    if (!m || m > 12) return false;
    if (!d) return false;
    if (m != 2)
    {
        if (d > days[m]) return false;
    }
    else
    {
        int leap = (y % 400 == 0) || (y % 4 == 0 && y % 100 != 0);
        if (d > 28 + leap) return false;
    }
    return true;
}

int main()
{
    printf("2022 3 21 : ");
    if (check_valid(2022, 3, 21)) puts("合法");
    else puts("不合法");

    printf("2022 2 29 : ");
    if (check_valid(2022, 2, 29)) puts("合法");
    else puts("不合法");
    return 0;
}

输出:

2022 3 21 : 合法
2022 2 29 : 不合法
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,以下是一个简单的五子棋游戏的示例。该示例使用了控制台界面和简单的人机对战。 ```c++ #include <iostream> #include <cstring> #include <ctime> #include <cstdlib> using namespace std; const int SIZE = 15; char board[SIZE][SIZE]; void clear_board() { for (int i = 0; i < SIZE; i++) { for (int j = 0; j < SIZE; j++) { board[i][j] = '+'; } } } void print_board() { cout << " "; for (int i = 0; i < SIZE; i++) { cout << i + 1 << " "; } cout << endl; for (int i = 0; i < SIZE; i++) { cout << char(i + 'A') << " "; for (int j = 0; j < SIZE; j++) { cout << board[i][j] << " "; } cout << endl; } } bool is_valid_pos(int row, int col) { if (row < 0 || row >= SIZE || col < 0 || col >= SIZE) { return false; } if (board[row][col] != '+') { return false; } return true; } bool check_win(char player) { // 检查每行 for (int i = 0; i < SIZE; i++) { for (int j = 0; j <= SIZE - 5; j++) { int k; for (k = 0; k < 5; k++) { if (board[i][j + k] != player) { break; } } if (k == 5) { return true; } } } // 检查每列 for (int i = 0; i < SIZE; i++) { for (int j = 0; j <= SIZE - 5; j++) { int k; for (k = 0; k < 5; k++) { if (board[j + k][i] != player) { break; } } if (k == 5) { return true; } } } // 检查每条对角线 for (int i = 0; i <= SIZE - 5; i++) { for (int j = 0; j <= SIZE - 5; j++) { int k; for (k = 0; k < 5; k++) { if (board[i + k][j + k] != player) { break; } } if (k == 5) { return true; } } } // 检查每条反对角线 for (int i = 0; i <= SIZE - 5; i++) { for (int j = SIZE - 1; j >= 4; j--) { int k; for (k = 0; k < 5; k++) { if (board[i + k][j - k] != player) { break; } } if (k == 5) { return true; } } } return false; } void human_play(char player) { cout << "请玩家 " << player << " 下棋(如:A1):" << endl; while (true) { string input; getline(cin, input); if (input.length() < 2) { cout << "输入无效,请重新输入:" << endl; continue; } int row = input[0] - 'A'; int col = input[1] - '1'; if (!is_valid_pos(row, col)) { cout << "此位置不能下,请重新输入:" << endl; continue; } board[row][col] = player; break; } } void computer_play(char player) { cout << "电脑 " << player << " 正在思考..." << endl; while (true) { int row = rand() % SIZE; int col = rand() % SIZE; if (is_valid_pos(row, col)) { board[row][col] = player; break; } } } int main() { srand(time(NULL)); clear_board(); print_board(); char human_player, computer_player; cout << "请选择执棋方(X或O):" << endl; while (true) { string input; getline(cin, input); if (input.length() < 1 || (input[0] != 'X' && input[0] != 'O')) { cout << "输入无效,请重新输入:" << endl; continue; } human_player = input[0]; computer_player = (human_player == 'X') ? 'O' : 'X'; break; } while (true) { human_play(human_player); print_board(); if (check_win(human_player)) { cout << "恭喜玩家 " << human_player << " 获胜!" << endl; break; } computer_play(computer_player); print_board(); if (check_win(computer_player)) { cout << "电脑 " << computer_player << " 获胜!" << endl; break; } } return 0; } ``` 该示例中,我们首先定义了一个15x15的棋盘,并实现了清空棋盘、打印棋盘、检查落子位置是否有效、检查是否获胜、人类玩家下棋和电脑玩家下棋等函数。然后,我们在主函数中实现了游戏的流程,包括选择执棋方、轮流下棋、检查获胜等操作。在电脑玩家下棋时,我们使用了随机算法来选择落子位置。 需要注意的是,这只是一个简单的示例,实际应用中还需要进行更多的错误处理和数据校验,以确保程序的稳定性和可靠性。此外,该示例只实现了最基本的人机对战,还可以通过网络实现多人对战等更高级的功能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值