先说结论:会问日不是千年一遇,到 3000 年为止的回文日如下:
[1-01-01, 1-02-01, 1-03-01, 1-04-01, 1-05-01, 1-06-01, 1-07-01, 1-08-01, 1-09-01, 1-10-11, 1-11-11, 1-12-11, 2-01-02, 2-02-02, 2-03-02, 2-04-02, 2-05-02, 2-06-02, 2-07-02, 2-08-02, 2-09-02, 2-10-12, 2-11-12, 2-12-12, 3-01-03, 3-02-03, 3-03-03, 3-04-03, 3-05-03, 3-06-03, 3-07-03, 3-08-03, 3-09-03, 3-10-13, 3-11-13, 3-12-13, 4-01-04, 4-02-04, 4-03-04, 4-04-04, 4-05-04, 4-06-04, 4-07-04, 4-08-04, 4-09-04, 4-10-14, 4-11-14, 4-12-14, 5-01-05, 5-02-05, 5-03-05, 5-04-05, 5-05-05, 5-06-05, 5-07-05, 5-08-05, 5-09-05, 5-10-15, 5-11-15, 5-12-15, 6-01-06, 6-02-06, 6-03-06, 6-04-06, 6-05-06, 6-06-06, 6-07-06, 6-08-06, 6-09-06, 6-10-16, 6-11-16, 6-12-16, 7-01-07, 7-02-07, 7-03-07, 7-04-07, 7-05-07, 7-06-07, 7-07-07, 7-08-07, 7-09-07, 7-10-17, 7-11-17, 7-12-17, 8-01-08, 8-02-08, 8-03-08, 8-04-08, 8-05-08, 8-06-08, 8-07-08, 8-08-08, 8-09-08, 8-10-18, 8-11-18, 8-12-18, 9-01-09, 9-02-09, 9-03-09, 9-04-09, 9-05-09, 9-06-09, 9-07-09, 9-08-09, 9-09-09, 9-10-19, 9-11-19, 9-12-19, 10-11-01, 11-11-11, 12-11-21, 20-11-02, 21-11-12, 22-11-22, 30-11-03, 31-11-13, 32-11-23, 40-11-04, 41-11-14, 42-11-24, 50-11-05, 51-11-15, 52-11-25, 60-11-06, 61-11-16, 62-11-26, 70-11-07, 71-11-17, 72-11-27, 80-11-08, 81-11-18, 82-11-28, 90-11-09, 91-11-19, 92-11-29, 100-10-01, 101-01-01, 101-11-01, 102-02-01, 102-12-01, 103-03-01, 104-04-01, 105-05-01, 106-06-01, 107-07-01, 108-08-01, 109-09-01, 110-10-11, 111-01-11, 111-11-11, 112-02-11, 112-12-11, 113-03-11, 114-04-11, 115-05-11, 116-06-11, 117-07-11, 118-08-11, 119-09-11, 120-10-21, 121-01-21, 121-11-21, 122-02-21, 122-12-21, 123-03-21, 124-04-21, 125-05-21, 126-06-21, 127-07-21, 128-08-21, 129-09-21, 130-10-31, 131-01-31, 132-12-31, 133-03-31, 135-05-31, 137-07-31, 138-08-31, 200-10-02, 201-01-02, 201-11-02, 202-02-02, 202-12-02, 203-03-02, 204-04-02, 205-05-02, 206-06-02, 207-07-02, 208-08-02, 209-09-02, 210-10-12, 211-01-12, 211-11-12, 212-02-12, 212-12-12, 213-03-12, 214-04-12, 215-05-12, 216-06-12, 217-07-12, 218-08-12, 219-09-12, 220-10-22, 221-01-22, 221-11-22, 222-02-22, 222-12-22, 223-03-22, 224-04-22, 225-05-22, 226-06-22, 227-07-22, 228-08-22, 229-09-22, 300-10-03, 301-01-03, 301-11-03, 302-02-03, 302-12-03, 303-03-03, 304-04-03, 305-05-03, 306-06-03, 307-07-03, 308-08-03, 309-09-03, 310-10-13, 311-01-13, 311-11-13, 312-02-13, 312-12-13, 313-03-13, 314-04-13, 315-05-13, 316-06-13, 317-07-13, 318-08-13, 319-09-13, 320-10-23, 321-01-23, 321-11-23, 322-02-23, 322-12-23, 323-03-23, 324-04-23, 325-05-23, 326-06-23, 327-07-23, 328-08-23, 329-09-23, 400-10-04, 401-01-04, 401-11-04, 402-02-04, 402-12-04, 403-03-04, 404-04-04, 405-05-04, 406-06-04, 407-07-04, 408-08-04, 409-09-04, 410-10-14, 411-01-14, 411-11-14, 412-02-14, 412-12-14, 413-03-14, 414-04-14, 415-05-14, 416-06-14, 417-07-14, 418-08-14, 419-09-14, 420-10-24, 421-01-24, 421-11-24, 422-02-24, 422-12-24, 423-03-24, 424-04-24, 425-05-24, 426-06-24, 427-07-24, 428-08-24, 429-09-24, 500-10-05, 501-01-05, 501-11-05, 502-02-05, 502-12-05, 503-03-05, 504-04-05, 505-05-05, 506-06-05, 507-07-05, 508-08-05, 509-09-05, 510-10-15, 511-01-15, 511-11-15, 512-02-15, 512-12-15, 513-03-15, 514-04-15, 515-05-15, 516-06-15, 517-07-15, 518-08-15, 519-09-15, 520-10-25, 521-01-25, 521-11-25, 522-02-25, 522-12-25, 523-03-25, 524-04-25, 525-05-25, 526-06-25, 527-07-25, 528-08-25, 529-09-25, 600-10-06, 601-01-06, 601-11-06, 602-02-06, 602-12-06, 603-03-06, 604-04-06, 605-05-06, 606-06-06, 607-07-06, 608-08-06, 609-09-06, 610-10-16, 611-01-16, 611-11-16, 612-02-16, 612-12-16, 613-03-16, 614-04-16, 615-05-16, 616-06-16, 617-07-16, 618-08-16, 619-09-16, 620-10-26, 621-01-26, 621-11-26, 622-02-26, 622-12-26, 623-03-26, 624-04-26, 625-05-26, 626-06-26, 627-07-26, 628-08-26, 629-09-26, 700-10-07, 701-01-07, 701-11-07, 702-02-07, 702-12-07, 703-03-07, 704-04-07, 705-05-07, 706-06-07, 707-07-07, 708-08-07, 709-09-07, 710-10-17, 711-01-17, 711-11-17, 712-02-17, 712-12-17, 713-03-17, 714-04-17, 715-05-17, 716-06-17, 717-07-17, 718-08-17, 719-09-17, 720-10-27, 721-01-27, 721-11-27, 722-02-27, 722-12-27, 723-03-27, 724-04-27, 725-05-27, 726-06-27, 727-07-27, 728-08-27, 729-09-27, 800-10-08, 801-01-08, 801-11-08, 802-02-08, 802-12-08, 803-03-08, 804-04-08, 805-05-08, 806-06-08, 807-07-08, 808-08-08, 809-09-08, 810-10-18, 811-01-18, 811-11-18, 812-02-18, 812-12-18, 813-03-18, 814-04-18, 815-05-18, 816-06-18, 817-07-18, 818-08-18, 819-09-18, 820-10-28, 821-01-28, 821-11-28, 822-02-28, 822-12-28, 823-03-28, 824-04-28, 825-05-28, 826-06-28, 827-07-28, 828-08-28, 829-09-28, 900-10-09, 901-01-09, 901-11-09, 902-02-09, 902-12-09, 903-03-09, 904-04-09, 905-05-09, 906-06-09, 907-07-09, 908-08-09, 909-09-09, 910-10-19, 911-01-19, 911-11-19, 912-02-19, 912-12-19, 913-03-19, 914-04-19, 915-05-19, 916-06-19, 917-07-19, 918-08-19, 919-09-19, 920-10-29, 921-01-29, 921-11-29, 922-12-29, 923-03-29, 924-04-29, 925-05-29, 926-06-29, 927-07-29, 928-08-29, 929-09-29, 1001-10-01, 1010-01-01, 1011-11-01, 1020-02-01, 1021-12-01, 1030-03-01, 1040-04-01, 1050-05-01, 1060-06-01, 1070-07-01, 1080-08-01, 1090-09-01, 1101-10-11, 1110-01-11, 1111-11-11, 1120-02-11, 1121-12-11, 1130-03-11, 1140-04-11, 1150-05-11, 1160-06-11, 1170-07-11, 1180-08-11, 1190-09-11, 1201-10-21, 1210-01-21, 1211-11-21, 1220-02-21, 1221-12-21, 1230-03-21, 1240-04-21, 1250-05-21, 1260-06-21, 1270-07-21, 1280-08-21, 1290-09-21, 1301-10-31, 1310-01-31, 1321-12-31, 1330-03-31, 1350-05-31, 1370-07-31, 1380-08-31, 2001-10-02, 2010-01-02, 2011-11-02, 2020-02-02, 2021-12-02, 2030-03-02, 2040-04-02, 2050-05-02, 2060-06-02, 2070-07-02, 2080-08-02, 2090-09-02, 2101-10-12, 2110-01-12, 2111-11-12, 2120-02-12, 2121-12-12, 2130-03-12, 2140-04-12, 2150-05-12, 2160-06-12, 2170-07-12, 2180-08-12, 2190-09-12, 2201-10-22, 2210-01-22, 2211-11-22, 2220-02-22, 2221-12-22, 2230-03-22, 2240-04-22, 2250-05-22, 2260-06-22, 2270-07-22, 2280-08-22, 2290-09-22]
其中 80 后有生之年还会遇到下面的回文日:
2021-12-02, 2030-03-02, 2040-04-02, 2050-05-02, 2060-06-02, 2070-07-02, 2080-08-02, 2090-09-02
验证代码如下:
import java.util.ArrayList;
public class HWYear {
private int[] days = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
private ArrayList<String> years;
public HWYear()
{
years = new ArrayList<String>();
}
public void cal()
{
for(int year = 1; year < 3000; year++)
{
for(int month = 1; month <= 12; month++)
{
int totalDay = getNumOfDay(month);
if(month == 2 && isLeapYear(year))
{
totalDay += 1;
}
for(int day = 1; day < totalDay; day++)
{
String temp = year + formatNumber(month) + formatNumber(day);
if(isPalindromic(temp))
{
// System.out.println(temp);
years.add(year + "-" + formatNumber(month) + "-" + formatNumber(day));
}
}
}
}
}
public boolean isPalindromic(String s)
{
String news = "";
for(int i = s.length()-1; i > -1; i--)
{
news += s.substring(i, i+1);
}
return s.equals(news);
}
public ArrayList<String> getYears()
{
return years;
}
public String formatNumber(int number)
{
if(number < 10)
{
return "0" + number;
}
return number + "";
}
public int getNumOfDay(int month)
{
return days[month-1];
}
public boolean isLeapYear(int year)
{
return (year % 4 == 0 && year % 100 !=0) || year % 400 == 0;
}
public static void main(String[] args)
{
HWYear hwy = new HWYear();
hwy.cal();
System.out.println(hwy.getYears());
System.out.println(hwy.getYears().size());
}
}
Python 代码如下:
years = []
days = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
def format_number(number):
return f"0{number}" if number < 10 else str(number)
def date_string(year, month, day, flag=True):
if flag:
return f"{year}{format_number(month)}{format_number(day)}"
else:
return f"{year}-{format_number(month)}-{format_number(day)}"
for year in range(1, 3000):
for month in range(1, 13):
delta = 1 if ((year % 4 == 0 and year % 100 != 0) or (year % 400 == 0)) and month == 2 else 0
month_days = days[month-1] + delta
for day in range(1, month_days+1):
temp = date_string(year, month, day)
if temp == temp[::-1]:
years.append(date_string(year, month, day, False))
print(years)
print(len(years))
Python 代码可以更短,但是可读性稍微有点影响。
后台回复关键字:回文日获取所有回文日列表。
不信谣,不传谣,科学上网,欢迎学习编程,报考新东方 AP 课程。
Send to Author