0%

模拟 - 天干地支

题目

输入

1
2020

输出

1
gengzi

分析

思路一:从已知的庚子年1900年出发

首先分成在1900年前的年份和在1900年后的年份,计算l和1900的”距离“left

对于在1900年前的年份

天干就是在差值模10后加在庚的基础上再模10

地支就是在差值模12后加在子的基础上再模12

对于在1900年前的年份

天干就是在差值模10后,先将庚加10,再减前面的计算后,再模10(和循环队列的计算方式异曲同工之妙)

地址就是在差值模12后,先将子加12,再减前面的计算后,再模12

代码一

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
import java.util.Scanner;
// 1:无需package
// 2: 类名必须Main, 不可修改

public class Main {
public static String[] tiangan = {"jia", "yi", "bing", "ding", "wu", "ji", "geng", "xin", "ren", "gui"};
public static String[] dizhi = {"zi", "chou", "yin", "mao", "chen", "si", "wu", "wei", "shen", "you", "xu", "hai"};
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
//在此输入您的代码...
int year = scan.nextInt();
int left = 0;
int tianganIndex;
int dizhiIndex;
if(year >= 1900) {
left = year - 1900;
tianganIndex = (left % 10 + 6) % 10;
dizhiIndex = left % 12;

} else {
left = 1900 - year;
tianganIndex = (6 - (left % 10) + 10) % 10;
dizhiIndex = (0 + 12 - (left % 12)) % 12;
}
String tianganString = tiangan[tianganIndex];
String dizhiString = dizhi[dizhiIndex];
String nongliString = tianganString + dizhiString;
System.out.println(nongliString);
scan.close();
}
}

思路二

关键在找到“时间原点”,既然始终是60一循环,那么可以将1200年(经过计算是庚申年)作为时间原点

原因是1200年是60的倍数,相当于0

将天干数组从庚开始重新排列,地支数组从申开始重新排列

直接计算一个年份模10的结果到天干数组里查到对应的下标即可,地支同理

代码二

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
import java.util.Scanner;
// 1:无需package
// 2: 类名必须Main, 不可修改

public class Main {
//最简单的还是给这些天干地支重新排序,然后对年取余输出
public static void main(String[] args) {
Scanner scanner=new Scanner(System.in);
int year=scanner.nextInt();
String s1[]={"geng","xin","ren","gui","jia","yi","bing","ding","wu","ji"};
String s2[]={"shen","you","xu","hai","zi","chou","yin","mao","chen","si","wu","wei"};
int tiangan=year % 10;
int dizhi=year % 12;
System.out.println(s1[tiangan]+s2[dizhi]);
}
}