鱼C论坛

 找回密码
 立即注册
查看: 1866|回复: 3

[已解决]求助一下

[复制链接]
发表于 2023-10-13 09:21:08 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
7-8 表达式终极挑战-判断日期是否合法

输入格式:
在一行中三个正整数,分别表示年、月、日,期间可能使用空格 分隔,或采用斜杠/分隔或采用短横-分隔。

输出格式:
输出YES或NO。

输入样例1:
2049 5 31
输出样例1:
YES
输入样例2:
2100/2/29
输出样例2:
NO

这个题用c语言或者c++怎么做啊,谢谢大佬帮忙
最佳答案
2023-10-13 09:21:48
这道题需要判断输入的日期是否合法,可以按照以下步骤进行处理:

1. 读入年、月、日,可以使用scanf函数。
2. 判断年份是否为闰年,能被4整除但不能被100整除,或者能被400整除的年份为闰年。
3. 判断月份是否在1到12之间,如果不是则输出NO。
4. 判断日期是否在合法范围内,例如2月份的日期需要根据是否为闰年来判断。
5. 如果所有判断都通过,则输出YES,否则输出NO。

以下是C++代码实现:

  1. #include <iostream>
  2. using namespace std;

  3. bool isLeapYear(int year) {
  4.     return (year % 4 == 0 && year % 100 != 0) || (year % 400 == 0);
  5. }

  6. int main() {
  7.     int year, month, day;
  8.     char c;
  9.     cin >> year >> c >> month >> c >> day;
  10.     if (month < 1 || month > 12) {
  11.         cout << "NO" << endl;
  12.         return 0;
  13.     }
  14.     int maxDay;
  15.     switch (month) {
  16.         case 2:
  17.             maxDay = isLeapYear(year) ? 29 : 28;
  18.             break;
  19.         case 4:
  20.         case 6:
  21.         case 9:
  22.         case 11:
  23.             maxDay = 30;
  24.             break;
  25.         default:
  26.             maxDay = 31;
  27.             break;
  28.     }
  29.     if (day < 1 || day > maxDay) {
  30.         cout << "NO" << endl;
  31.         return 0;
  32.     }
  33.     cout << "YES" << endl;
  34.     return 0;
  35. }
复制代码


以上代码中,isLeapYear函数用于判断是否为闰年,根据闰年的定义进行判断即可。在主函数中,首先读入年、月、日,然后判断月份是否在1到12之间,如果不是则输出NO。接着根据月份来计算出当月的最大天数,需要注意判断2月份的最大天数。最后判断输入的日期是否在合法范围内,如果是则输出YES,否则输出NO。

希望能够帮到你!
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2023-10-13 09:21:48 | 显示全部楼层    本楼为最佳答案   
这道题需要判断输入的日期是否合法,可以按照以下步骤进行处理:

1. 读入年、月、日,可以使用scanf函数。
2. 判断年份是否为闰年,能被4整除但不能被100整除,或者能被400整除的年份为闰年。
3. 判断月份是否在1到12之间,如果不是则输出NO。
4. 判断日期是否在合法范围内,例如2月份的日期需要根据是否为闰年来判断。
5. 如果所有判断都通过,则输出YES,否则输出NO。

以下是C++代码实现:

  1. #include <iostream>
  2. using namespace std;

  3. bool isLeapYear(int year) {
  4.     return (year % 4 == 0 && year % 100 != 0) || (year % 400 == 0);
  5. }

  6. int main() {
  7.     int year, month, day;
  8.     char c;
  9.     cin >> year >> c >> month >> c >> day;
  10.     if (month < 1 || month > 12) {
  11.         cout << "NO" << endl;
  12.         return 0;
  13.     }
  14.     int maxDay;
  15.     switch (month) {
  16.         case 2:
  17.             maxDay = isLeapYear(year) ? 29 : 28;
  18.             break;
  19.         case 4:
  20.         case 6:
  21.         case 9:
  22.         case 11:
  23.             maxDay = 30;
  24.             break;
  25.         default:
  26.             maxDay = 31;
  27.             break;
  28.     }
  29.     if (day < 1 || day > maxDay) {
  30.         cout << "NO" << endl;
  31.         return 0;
  32.     }
  33.     cout << "YES" << endl;
  34.     return 0;
  35. }
复制代码


以上代码中,isLeapYear函数用于判断是否为闰年,根据闰年的定义进行判断即可。在主函数中,首先读入年、月、日,然后判断月份是否在1到12之间,如果不是则输出NO。接着根据月份来计算出当月的最大天数,需要注意判断2月份的最大天数。最后判断输入的日期是否在合法范围内,如果是则输出YES,否则输出NO。

希望能够帮到你!
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-10-13 09:21:59 | 显示全部楼层
这个问题可以通过创建一个函数来解决,该函数接收年、月和日作为参数,然后检查这个日期是否合法。这里有一个使用C++的示例:

  1. #include <iostream>
  2. #include <sstream>
  3. #include <vector>
  4. #include <string>

  5. using namespace std;

  6. bool isLeap(int year) {
  7.     return (year % 4 == 0 && year % 100 != 0) || (year % 400 == 0);
  8. }

  9. bool isValidDate(int year, int month, int day) {
  10.     if(year < 1 || month < 1 || month > 12 || day < 1 || day > 31)
  11.         return false;

  12.     if(month == 2) {
  13.         if(isLeap(year) && day > 29)
  14.             return false;
  15.         if(!isLeap(year) && day > 28)
  16.             return false;
  17.     }

  18.     if((month == 4 || month == 6 || month == 9 || month == 11) && day > 30)
  19.         return false;

  20.     return true;
  21. }

  22. vector<string> split(const string &s, char delim) {
  23.     stringstream ss(s);
  24.     string item;
  25.     vector<string> tokens;
  26.     while (getline(ss, item, delim)) {
  27.         tokens.push_back(item);
  28.     }
  29.     return tokens;
  30. }

  31. int main() {
  32.     string input;
  33.     getline(cin, input);

  34.     vector<string> tokens = split(input, ' ');
  35.     if(tokens.size() != 3) {
  36.         tokens = split(input, '/');
  37.         if(tokens.size() != 3) {
  38.             tokens = split(input, '-');
  39.         }
  40.     }

  41.     int year = stoi(tokens[0]);
  42.     int month = stoi(tokens[1]);
  43.     int day = stoi(tokens[2]);

  44.     if(isValidDate(year, month, day)) {
  45.         cout << "YES" << endl;
  46.     } else {
  47.         cout << "NO" << endl;
  48.     }

  49.     return 0;
  50. }
复制代码


这个程序首先定义了一个函数isLeap来判断一个年份是否是闰年,然后定义了一个函数isValidDate来判断一个日期是否合法。在main函数中,程序读取输入,然后使用空格、斜杠或短横线将输入分割成年、月和日,然后调用isValidDate函数来判断日期是否合法,最后输出结果。

注意,这个程序假设输入的年、月和日都是整数,并且没有进行错误处理。在实际使用中,你可能需要添加错误处理代码来处理不合法的输入。
请注意,本回答来自GPT-4
如果问题已经解决,请设置最佳答案
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-10-13 09:23:33 | 显示全部楼层
问题分析:

要判断一个日期是否合法,需要考虑以下几个方面:

1. 年份的范围:通常使用公历年份表示,可以限定在某个范围内(例如1900-2100)。
2. 月份的范围:合法的月份应介于1-12之间。
3. 不同月份的天数:不同月份有不同的天数,需要根据具体的年份和月份判断。
4. 闰年的处理:闰年的2月份有29天,平年只有28天。

根据以上分析,我们可以设计一个函数来判断日期是否合法。下面是使用C++实现的代码示例:
  1. #include <iostream>
  2. #include <sstream>
  3. #include <string>
  4. bool isLeapYear(int year) {
  5.     return (year % 4 == 0 && year % 100 != 0) || (year % 400 == 0);
  6. }
  7. bool isValidDate(int year, int month, int day) {
  8.     if (year < 1900 || year > 2100 || month < 1 || month > 12 || day < 1)
  9.         return false;
  10.     static const int daysInMonth[] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
  11.     // 处理闰年的2月份
  12.     if (month == 2 && isLeapYear(year))
  13.         return day <= 29;
  14.    
  15.     return day <= daysInMonth[month - 1];
  16. }
  17. int main() {
  18.     std::string input;
  19.     std::getline(std::cin, input);
  20.     std::stringstream ss(input);
  21.     int year, month, day;
  22.     // 从输入字符串中解析年、月、日
  23.     ss >> year;
  24.     ss.ignore(); // 跳过分隔符
  25.     ss >> month;
  26.     ss.ignore(); // 跳过分隔符
  27.     ss >> day;
  28.     if (isValidDate(year, month, day))
  29.         std::cout << "YES" << std::endl;
  30.     else
  31.         std::cout << "NO" << std::endl;
  32.     return 0;
  33. }
复制代码

代码说明:

1. isLeapYear()函数用于判断闰年,根据闰年的定义进行判断,返回true表示是闰年,返回false表示不是闰年。
2. isValidDate()函数用于判断日期是否合法。首先检查年份和月份的范围,然后根据月份和是否闰年来判断天数是否合法。
3. main()函数中,首先读取输入的日期字符串,然后使用std::stringstream进行解析,并传递给isValidDate()函数进行判断。最后根据判断结果输出"YES"或"NO"。

希望这个例子能帮助您理解如何在C/C++中判断日期的合法性。如果有任何疑问,请随时追问。

球一个最佳答案谢谢啦!这对我非常重要!
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-4-22 03:40

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表