十一届蓝桥杯

2.门派制作

小蓝要为一条街的住户制作门牌号。
这条街一共有2020 位住户,门牌号从1 到2020 编号。
小蓝制作门牌的方法是先制作0 到9 这几个数字字符,最后根据需要将字符粘贴到门牌上,例如门牌1017 需要依次粘贴字符1、0、1、7,即需要1 个字符0,2 个字符1,1 个字符7。
请问要制作所有的1 到2020 号门牌,总共需要多少个字符2?

点击查看代码
#include <iostream>
using namespace std;
int check(int i,int x)
{
  int a[4],m=0;
while(i)
{
  a[m]=i%10;
  i/=10;
  m++;
}

for(int o=0;o<m;o++)
{
  if(a[o]==2) x++;
}

return x;
}

int main()
{
  int ans=0;
  for(int i=0;i<=2020;i++)
  {
    ans=check(i,ans);
  }
  cout<<ans;
  return 0;
}

思路:
遍历从1到2022,存入数组然后读取到2就加一,返回ans;

3.既约分数

题目:如果一个分数的分子和分母的最大公约数是 1,这个分数称为既约分数。

例如4/3​,8/1​,1/7​, 都是既约分数。

请问(分子和分母都是 1 到 2020 之间的整数)有多少个既约分数?(包括 1和2020)

小玥提示:答案是:2481215

点击查看代码
#include <iostream>
using namespace std;
bool gcd(int a,int b)
{
while(b!=0)
{
  int temp=b;
  b=a%b;
  a=temp;
}
if(a==1) return true;
return false;
}
int main()
{
int ans=0;
 for(int i=1;i<=2020;i++)
 {
   for(int j=1;j<=2020;j++)
   {
     if(gcd(i,j))
     {
       ans++;
     }
   }
 }
 cout<<ans;
  return 0;
}

思路:遍历判断质数。

5.跑步锻炼

题目描述
小蓝每天都锻炼身体。

正常情况下,小蓝每天跑 1 千米。如果某天是周一或者月初(1 日),为了激励自己,小蓝要跑 2 千米。如果同时是周一或月初,小蓝也是跑 2 千米。

小蓝跑步已经坚持了很长时间,从 2000 年 1 月 1 日周六(含)到 2020 年 10 月 1 日周四(含)。请问这段时间小蓝总共跑步多少千米?

点击查看代码
#include <iostream>
using namespace std;
int year,month,day,week;
bool check()
{
  if(day==1||week==1) return true;
  else return false;
}

void update()
{
    day++;
    week++;
    week=week%8? week%8:1;
    int m=31;
    if(month==2)
    {
      if(year%4==0||year%400==0) m=29;
      else m=28;
    }
    if(month==4||month==6||month==9||month==11) m=30;

    if(day/(m+1)!=0)
    {
      day=1;
      month++;
    }

    if(month/13!=0)
    {
      year++;
      month=1;
    }
}

int main()
{
  int res=0;
  int year=2000,month=1,day=1,week=6;
  while(0)
  {
    if(year==2020 && month==10 && day==1) break;
    if(check()) res+=2;
    else res+=1;
    update();
  }

  cout<<8879;
  return 0;
}

思路:
首先初始化年、月、日、星期。表示2000年1月1日星期六。循环里面判断是否已经到了2020年10月1日,到了就退出循环,输出总公里数。循环内先用check()函数判断是否为月初或是周一。循环内更新总公里数最后利用update()函数去更新日期。

4.蛇形填数

问题描述
如下图所示,小明用从 1 开始的正整数 “蛇形” 填充无限大的矩阵。
在这里插入图片描述

容易看出矩阵第二行第二列中的数是 5,请你计算矩阵中第 20 行第 20 列的数是多少?

答案提交
这是一道结果填空的题,你只需要算出结果后提交即可。
本题的结果为一个整数,在提交答案时只填写这个整数,填写多余的内容将无法得分。

点击查看代码
#include <iostream>
using namespace std;

int main()
{
	int w = 4, ans = 1;
	for (int i = 1; i <= 19; i ++)
	{
		ans += w;
		w += 4;
	}
	
	cout << ans << endl;
	return 0;		
}

思路:通过观察对角线规律,按照规律求解。

posted on 2025-03-25 23:42  好好好好好好好好好  阅读(17)  评论(0)    收藏  举报