【心路历程】初次参加蓝桥杯实况

07-17 1292阅读

【心路历程】初次参加蓝桥杯实况

送给大家一句话:

寂静的光辉平铺的一刻,地上的每一个坎坷都被映照得灿烂。 – 史铁生 《我与地坛》

初次参加蓝桥杯有感

  • 一点小小的震撼
  • 难评的做题过程
    • A题 艺术与篮球
      • 问题描述
      • 解题
      • B 题 五子棋
        • 问题描述
        • 解题
        • C题 训练士兵
          • 问题描述
          • 解题
          • D题 团建
            • 解题
            • E题 成绩统计
              • 问题描述
              • 解题
              • F题 因数统计
                • 问题描述
                • 解题
                • G题 零食采购
                  • 问题描述
                  • 解题
                  • H题 魔法盒子
                    • 问题描述
                    • 解题
                    • 总结
                    • Thanks♪(・ω・)ノ谢谢阅读!!!
                    • 下一篇文章见!!!

                      一点小小的震撼

                      在今晨的曙光中,我踏进了蓝桥杯的赛场,这是自我踏入大学之门后,首次参与计算机领域的正规比赛。前两周的时间里,我像在荒原上追逐光影,一边是对知识的渴望,一边是时间的逼迫,探索着神秘的dfs算法。仿佛只有通过这种方式(毕竟暴力最好想)。

                      当我站在真正的试题面前时,却发现事与愿违。那些看似熟悉的题目,在我眼前逐渐展开了一幅幅复杂的图景。我惊愕地发现,那些曾以为可以轻易攻克的堡垒,现在看来竟是高不可攀。这种无力感,像是冷雨中的一丝寒风,让人不禁颤抖。

                      我的心中充满了复杂的情感:

                      1. 一方面是对这次首战的激动与兴奋,这种感觉如同初次触摸到未知世界的光辉;
                      2. 另一方面则是面对未知挑战时那种深深的无力与惊讶。这种矛盾的情感,就像是在寂静的夜空中追逐流星,美丽而短暂,令人难以忘怀。

                      我的表现并不好,更像是在赛博大厦前呆滞的哥布林

                      希望通过这篇博客,未来的学弟学妹们能够从我的经历中汲取教训,找到前行的勇气和智慧。

                      难评的做题过程

                      A题 艺术与篮球

                      问题描述

                      小蓝出生在一个艺术与运动并重的家庭中。

                      妈妈是位书法家,她希望小蓝能通过练习书法,继承她的艺术天赋,并练就一手好字。爸爸是一名篮球教练,他希望小蓝能通过篮球锻炼身体,培养运动的激情和团队合作的精神。

                      为了既满足妈妈的期望,又不辜负爸爸的心意,小蓝决定根据日期的笔画数来安排自己的练习。首先,他会将当天的日期按照“YYYYMIMIDD”的格式转换成一个8位数,然后将这8位数对应到汉字上,计算这些汉字的总笔画数。如果总笔画数超过50,他就去练习篮球;如果总笔画数不超过50,他就去练习书法。

                      例如,在2024年1月1日这天,日期可表示为一个8位数字20240101,其转换为汉字是“二零二四零一零一”。日期的总笔画数为2+13+2+5+13+1+13+1=50,因此在这天,小蓝会去练习书法。

                      以下是汉字的笔画数对照表:

                      【心路历程】初次参加蓝桥杯实况

                      现在,请你帮助小蓝统计一下,在2000年1月1日到2024年4月13日这段时间内,小蓝有多少天是在练习篮球?

                      解题

                      首先看题目我就想到了一位故人,哈哈哈。这道题我思考了一下就决定复刻一下我之前实现的日期管理工具。通过类封装来达到对日期的操作,然后采用数组映射来转换为笔画数。

                      大致代码如下:

                      #include
                      #include
                      #include
                      #include
                      using namespace std;
                      class Date
                      {
                      public:
                      	Date(int year = 2000, int month = 1, int day = 1) {
                      		_year = year;
                      		_month = month;
                      		_day = day;
                      	}
                      	//关键: 获取当前月的日期
                      	int GetMonthDay(int year, int month) const {
                      		int day[13] = { 0,31,28,31,30,31,30,31,31,30,31,30,31 };
                      		if (month == 2 && ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0))
                      		{
                      			return 29;
                      		}
                      		return day[month];
                      	}
                      	//日期++操作
                      	void add()
                      	{
                      		_day++;
                      		while (_day > GetMonthDay(_year, _month)) {
                      			_day -= GetMonthDay(_year, _month);
                      			_month++;
                      			if (_month > 12) {
                      				_year++;
                      				_month = 1;
                      			}
                      		}
                      	}
                      	int DateToInt()
                      	{
                      		return _year * 10000 + _month * 100 + _day;
                      	}
                      private:
                      	int _year;
                      	int _month;
                      	int _day;
                      };
                      int main()
                      {
                      	//笔画映射
                      	int nums[10] = { 13 , 1 , 2 , 3 ,5 , 4 , 4 , 2 , 2 , 2 };
                      	int  ans = 0;
                      	Date d1(2000, 1, 1);
                      	while (d1.DateToInt() != 20240414)
                      	{
                      		int num = d1.DateToInt();
                      		int sum = 0;
                      		while (num)
                      		{
                      			int n = num % 10;
                      			sum += nums[n];
                      			num /= 10;
                      		}
                      		if (sum > 50) ans++;
                      		d1.add();
                      	}
                      	cout 0};
                      int ans = 0;
                      bool judge()
                      {
                      	int sum = 0;
                      	int cnt = 10000001;
                      	for (int i = 0; i  n >> s;
                      	for (int i = 0; i > man[i][0] >> man[i][1];
                      	}
                      	while (1)
                      	{
                      		if (judge()) break;
                      		for (int i = 0; i 
VPS购买请点击我

文章版权声明:除非注明,否则均为主机测评原创文章,转载或复制请以超链接形式并注明出处。

目录[+]