安全感 题解分享 · 2024/4/5
日期问题(编程题) - 题解
``` #include<bits/stdc++.h> using namespace std; int a,b,c; int main() { scanf("%d/%d/%d",&a,&b,&c); for(int i=1960;i<=2059;i++) for(int j=1;j<=12;j++) for(int k=1;k<=31;k++) { if(j==1||j==3||j==5||j==7||j==8||j==10||j==12){ } else if(j==2) { if(i%400==0||(i%100!=0&&i%4==0)) { if(k>29) break; }else { if(k>28) break; } }else { if(k>30) break; } if ((i % 100 == a && j == b && k == c)|| // 年/月/日 (j == a && k == b && i % 100 == c)|| // 月/日/年 (k == a && j == b && i % 100 == c)) //月/日/年 printf("%d-%02d-%02d\n", i, j, k); } return 0; } ```
查看全文
0 0 8 2
Heng_Xin 题解分享 · 2025/4/11
日期问题(编程题) - 题解
板子判断 + set排序+去重 ```cpp #include <cstdio> #include <iostream> #include <string> #include <vector> #include <unordered_map> #include <unordered_set> #include <set> #include <algorithm> using namespace std; using ll = long long; struct Ac { bool isSb(int y, int m, int d) { if (y >= 60) y += 1900; else y += 2000; if (y < 1960 || y > 2059 || m > 12 || m <= 0 || d <= 0) return false; if (m == 2 || m == 4 || m == 6 || m == 9 || m == 11) { if (d > 30) return false; if (m == 2) { if (y % 400 == 0 || (y % 100 && y % 4 == 0)) return d <= 29; return d <= 28; } } return true; } void run() { // 日月年 abc // 年月日 cba // 年日月 cab int a, b, c; scanf("%d/%d/%d", &a, &b, &c); set<tuple<int, int, int>> res; if (isSb(a, b, c)) res.insert(tuple<int, int, int>{a, b, c}); if (isSb(c, a, b)) res.insert(tuple<int, int, int>{c, a, b}); if (isSb(c, b, a)) res.insert(tuple<int, int, int>{c, b, a}); for (auto it : res) { int y, m ,d; tie(y, m, d) = it; if (y >= 60) y += 1900; else y += 2000; printf("%d-%02d-%02d\n", y, m, d); } } }; int main() { Ac ak; ak.run(); return 0; } ```
查看全文
0 0 1 1
ERGO5 题解分享 · 2025/1/30
日期问题(编程题) - 题解
``` ` ``` // 读数据写的有点蠢,但是解法没用暴力,可以参考一下 include using namespace std; int main() { char ch[114]; char c; int i = 0; while ((c = getchar()) != '\n') { ch[i] = c; i++; } stringstream ss; vector s(3); vector s_ex(3); ss > s[0]; s_ex[0] = s[0]; ss.clear(); ss > s[1]; s_ex[1] = s[1]; ss.clear(); ss > s[2]; s_ex[2] = s[2]; ////////////////////////////// sort(s.begin(),s.end()); //这句一定要有,把日期初始成从小到大递增的状态,然后进行字典序遍历,否则会遗漏情况:( //遍历字典序,然后根据题目要求进行特判并输出 do { if ((s[0] == s_ex[0]) && (s[1] == s_ex[1]) && (s[2] == s_ex[2])) { if (s[0] <= "59") { cout << "20"; } else { cout << "19"; } cout << s[0] << "-" << s[1] << "-" << s[2] << endl; continue; } if((s[0] == s_ex[2]) && (s[1] == s_ex[0]) && (s[2] == s_ex[1])){ if((s[1] == "00") || (s[2] == "00"))continue; if (s[0] <= "59") { cout << "20"; } else { cout << "19"; } cout << s[0] << "-" << s[1] << "-" << s[2] << endl; continue; } if((s[0] == s_ex[2]) && (s[1] == s_ex[1]) && (s[2] == s_ex[0])){ if((s[1] == "00") || (s[2] == "00"))continue; if (s[0] <= "59") { cout << "20"; } else { cout << "19"; } cout << s[0] << "-" << s[1] << "-" << s[2] << endl; continue; } } while (next_permutation(s.begin(), s.end())); return 0; } ``` ` ``` ``` ` ``` ``
查看全文
0 0 1 1
Mandy 题解分享 · 2025/1/16
日期问题(编程题) - 题解
```cpp #include <bits/stdc++.h> using namespace std; int months[] = {0,31,28,31,30,31,30,31,31,30,31,30,31}; int main() { int a,b,c; scanf("%d/%d/%d",&a,&b,&c); for(int year=1960;year<=2059;year++) { if((year%4==0&&year%100!=0)||year%400==0) months[2]=29; else months[2]=28; for(int month=1;month<=12;month++) { for(int day=1;day<=months[month];day++) { if((year%100==a&&month==b&&day==c)|| (month==a&&day==b&&year%100==c)|| (day==a&&month==b&&year%100==c)) printf("%d-%02d-%02d\\n",year,month,day); } } } return 0; } ```
查看全文
0 0 1 2
rh123 题解分享 · 2025/1/4
日期问题(编程题) - 题解
``` #include<iostream> #include<cstdio> bool fun(int year) { if(year%4==0&&year%100!=0) return true; else return false; } int main() { int a,b,c; int mon[]={0,31,28,31,30,31,30,31,31,30,31,30,31}; scanf("%d/%d/%d",&a,&b,&c); for(int year=1960;year<=2059;year++) { if(fun(year)) mon[2]=29; else mon[2]=28; for(int month=1;month<=12;month++) { for(int day=1;day<=mon[month];day++) { if((year%100==a&&month==b&&day==c)||(month==a&&day==b&&year%100==c)||(day==a&&month==b&&year%100==c)) printf("%d-%02d-%02d\n",year,month,day); } } } return 0; } ```
查看全文
0 0 1 1
Captain_Dong 题解分享 · 2024/4/11
日期问题(编程题) - 题解
直接套板子,再补上这个判断代码即可: ``` if( (year%100 == a && month == b && day == c) || (month == a && day == b && year%100 ==c) || (day == a && month == b && year%100 == c)){ printf("%d-%02d-%02d\n",year,month,day); } ``` 完整代码如下: ``` #include<bits/stdc++.h> using namespace std; //int months[]= {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}; int a,b,c; int main() { scanf("%d/%d/%d",&a,&b,&c); for(int year = 1960; year <= 2059; year++) for(int month = 1; month <= 12; month++) for(int day =1; day <= 31; day++) { if(month == 1 || month == 3 || month == 5 || month == 7 || month == 8 || month == 10 || month == 12); else if(month == 2) { if((year%4 == 0 && year%100 != 0) || year % 400 == 0) { if(day > 29) break; } else { if(day > 28) break; } } else { if(day > 30) break; } //从这开始编写代码: //把题目要求得到三种情况模拟枚举出来即可 即 1. 年、月、日 or 2. 月、日、年 or 3. 日、月、年 //只不过题目把年份也都省略了前两位 可以通过 mod 运算取出年份的后两位:year%100 if( (year%100 == a && month == b && day == c) || (month == a && day == b && year%100 ==c) || (day == a && month == b && year%100 == c)){ printf("%d-%02d-%02d\n",year,month,day); } } return 0; } ```
查看全文
0 0 1 2
huanghao666 题解分享 · 2025/1/24
日期问题(编程题) - 题解
include using namespace std; int m1[]={0,1,3,5,7,8,10,12}; int m2[]={0,4,6,9,11}; string trans(int year,int month,int day){ ``` string ans=""; if(year>=0&&year<=59){ ans+="20"; if(year<10){ ans+="0"; } } else if(year>59){ ans+="19"; } ans+=to_string(year)+"-"; //处理月份 if(month<10){ ans+="0"; } ans+=to_string(month)+"-"; //处理日期 if(day<10){ ``` ans+="0"; } ans+=to_string(day); ``` int day1=stoi(ans.substr(8,2)); int month1=stoi(ans.substr(5,2)); int year1=stoi(ans.substr(0,4)); ``` // cout a; string data; cin>>data; string f1 = data.substr(0, 2); // 年 string f2 = data.substr(3, 2); // 月 string f3 = data.substr(6, 2); // 日 int year,day,month; //先按照年月日 year=stoi(f1); month=stoi(f2); day=stoi(f3); // cout<<year<<" "<<month<<" "<<day<<endl; string k1=trans(year,month,day); string k2=trans(day,year,month); string k3=trans(day,month,year); ``` a.push_back(k1); a.push_back(k2); a.push_back(k3); sort(a.begin(),a.end()); for(int i=0;i<a.size();i++){ if(a[i]!=" "){ if(i==0){ cout<<a[i]<<endl; } else if(a[i]!=a[i-1]){ cout<<a[i]<<endl; } } } return 0; ``` }
查看全文
0 0 0 2
Giocatore 题解分享 · 2025/4/9
日期问题(编程题) - 题解
``` import java.util.*; import java.io.*; import java.time.*; public class Main { public static void main(String[] args){ Scanner sc = new Scanner(System.in); String input = sc.nextLine(); String[] numbers = input.split("/"); int aa = Integer.parseInt(numbers[0]); int bb = Integer.parseInt(numbers[1]); int cc = Integer.parseInt(numbers[2]); int year = 0; int[] ry ={1,3,5,7,8,10,12}; TreeSet<LocalDate> dates = new TreeSet<>(); if(aa >=60) year = aa +1900; else year = aa+2000; dates = addDate(year,bb,cc,dates,ry); if(cc >=60) year = cc +1900; else year = cc+2000; dates = addDate(year,aa,bb,dates,ry); if(cc >=60) year = cc +1900; else year = cc+2000; dates = addDate(year,bb,aa,dates,ry); for(LocalDate date : dates){ System.out.println(date); } } public static TreeSet<LocalDate> addDate(int years,int months,int days, TreeSet<LocalDate>dates ,int[] ry){ try { dates.add(LocalDate.of(years, months, days)); } catch(Exception e){} return dates; } } ```
查看全文
0 0 0 1
DB小左 题解分享 · 2025/3/10
日期问题(编程题) - 题解
``` #include <bits/stdc++.h> using namespace std; int main() { int a,b,c; scanf("%d/%d/%d",&a,&b,&c); for(int year = 1960; year < 2060; year++) for(int month = 1; month <= 12; month++) for(int day = 1; day <=31; day++) { if(month == 1||month == 3||month == 5||month == 7||month == 8||month==10||month == 12); else if(month == 2){ if(year%400 == 0||(year%4 == 0 && year%100 != 0)) { if(day>29) break; } else if(day>28) break; } else if(day>30) break; if(year%100 == a && month == b && day == c) { printf("%d-%02d-%02d\n",year,month,day); } else if(year%100 == c && month == a && day == b) { printf("%d-%02d-%02d\n",year,month,day); } else if(year%100 == c && month == b && day == a) { printf("%d-%02d-%02d\n",year,month,day); } } } ```
查看全文
0 0 0 1
CQS 题解分享 · 2025/3/3
日期问题(编程题) - 题解
``` #include<stdio.h> int a, b, c; int main() { scanf("%d/%d/%d", &a, &b, &c); for (int year = 1960; year < 2060; year++) { for (int month = 1; month < 13; month++) { int days_in_month; if (month == 1 || month == 3 || month == 5 || month == 7 || month == 8 || month == 10 || month == 12) { days_in_month = 31; } else if (month == 2) { if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0) { days_in_month = 29; } else { days_in_month = 28; } } else { days_in_month = 30; } for (int day = 1; day <= days_in_month; day++) { if ((year % 100 == a && month == b && day == c) || (year % 100 == c && month == a && day == b) || (year % 100 == c && month == b && day == a)) printf("%d-%02d-%02d\n", year, month, day); } } } return 0; } ```
查看全文
0 0 0 1