解题思路:
1:要设置怎样的数组存储天干地支?
答:
二维字符数组
char tg[10][10]={{"jia"},{"yi"},{"bing"},{"ding"},{"wu"},{"ji"},{"geng"},{"xin"},{"ren"},{"gui"}};
char dz[12][10]={{"zi"},{"chou"},{"yin"},{"mao"},{"chen"},{"si"},{"wu"},{"wei"},{"shen"},{"you"},{"xu"},{"hai"}};
2:要如何设定判断的标准?
答:
一个循环是60年,且题中给出了2020年是庚子年(在数组中对应的位置是x=6,y=0),那我们可以知道40是第一个庚子年,同理,将所有的测试年份year都减到60年以内,然后以40年为标准来对x,y进行加减操作来调整:
若是year>=40,则进行加操作
若year<40,则进行减操作
当然,考虑到数组边界问题,可以通过取余法或循环法解决
注意事项:
加操作用取余法可以轻松实现
减操作可以通过循环法来实现,不过边界设置时需要注意是-1而不是0
参考代码:
#include<stdio.h>
#include<string.h>
int main()
{
char tg[10][10]={{"jia"},{"yi"},{"bing"},{"ding"},{"wu"},{"ji"},{"geng"},{"xin"},{"ren"},{"gui"}};
char dz[12][10]={{"zi"},{"chou"},{"yin"},{"mao"},{"chen"},{"si"},{"wu"},{"wei"},{"shen"},{"you"},{"xu"},{"hai"}};
int x=6,y=0,year;//第一个庚子年是公元40年
scanf("%d",&year);
while(year>60)//调整year到60以内
{
year-=60;
}
if(year>=40)//取余法
{
x=(x+(year-40))%10;
y=(y+(year-40))%12;
printf("%s\n",strcat(tg[x],dz[y]));
}
else//循环法
{
for(int i=0;i<40-year;i++)
{
x--;
if(x==-1)
{
x=9;
}
y--;
if(y==-1)
{
y=11;
}
}
printf("%s\n",strcat(tg[x],dz[y]));
}
return 0;
}
ps:看了一眼近年的蓝桥题,难度好像偏低,但任然不能疏忽大意,解体的时间要控制的更严格