题解分享
题解分享简介
日期问题(编程题) - 题解
```
#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
日期问题(编程题) - 题解
板子判断 + 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
日期问题(编程题) - 题解
```
`
```
// 读数据写的有点蠢,但是解法没用暴力,可以参考一下
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
日期问题(编程题) - 题解
```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
日期问题(编程题) - 题解
```
#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
日期问题(编程题) - 题解
直接套板子,再补上这个判断代码即可:
```
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
日期问题(编程题) - 题解
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
日期问题(编程题) - 题解
```
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
日期问题(编程题) - 题解
```
#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
日期问题(编程题) - 题解
```
#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



