0
点赞
收藏
分享

微信扫一扫

题目 2599: 蓝桥杯2020年第十一届国赛真题-天干地支——直译法

hwwjian 2022-03-26 阅读 45

解题思路:

1:要设置怎样的数组存储天干地支?

答:

  1. 二维字符数组
  2. char tg[10][10]={{"jia"},{"yi"},{"bing"},{"ding"},{"wu"},{"ji"},{"geng"},{"xin"},{"ren"},{"gui"}};
  3. char dz[12][10]={{"zi"},{"chou"},{"yin"},{"mao"},{"chen"},{"si"},{"wu"},{"wei"},{"shen"},{"you"},{"xu"},{"hai"}};

2:要如何设定判断的标准?

答:

  1. 一个循环是60年,且题中给出了2020年是庚子年(在数组中对应的位置是x=6,y=0),那我们可以知道40是第一个庚子年,同理,将所有的测试年份year都减到60年以内,然后以40年为标准来对x,y进行加减操作来调整:
  2. 若是year>=40,则进行加操作
  3. 若year<40,则进行减操作
  4. 当然,考虑到数组边界问题,可以通过取余法或循环法解决

注意事项:

  1. 加操作用取余法可以轻松实现
  2. 减操作可以通过循环法来实现,不过边界设置时需要注意是-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:看了一眼近年的蓝桥题,难度好像偏低,但任然不能疏忽大意,解体的时间要控制的更严格

举报

相关推荐

0 条评论