【第十一届蓝桥杯真题】【省赛】【第二场】【C++B组】【学习笔记】蓝桥杯每日一练day3

今天课多,明天细补

A、门牌制作(5分)

门牌制作 - 蓝桥云课 (lanqiao.cn)

在这里插入图片描述

直接暴力了

#include <iostream>
#include<cstring>
using namespace std;
string s;
int main()
{
  for(int i = 1 ; i <= 2020 ; i++)
    s += to_string(i);
  int res = 0;
  for(int i = 0 ; i < s.size() ; i++)
    if(s[i] == '2')
      res++;
  cout<<res<<endl;
  return 0;
}
// 624

B、既约分数(5分)

既约分数 - 蓝桥云课 (lanqiao.cn)

在这里插入图片描述

如果硬要说,难点的话,应该是求最大公约数

#include <iostream>
using namespace std;
int gcd(int a,int b)
{
  return b ? gcd(b,a % b) : a;
}
int main()
{
  int res = 0;
  for(int i = 1 ; i <= 2020 ; i++)
    for(int j = 1 ; j <= 2020 ; j++)
      if(gcd(i,j) == 1)
        res ++;
  cout<<res<<endl;
  return 0;
}
// 2481215

C、蛇形填数(10分)

蛇形填数 - 蓝桥云课 (lanqiao.cn)

在这里插入图片描述

在这里插入图片描述

简简单单偏移打表

在这里插入图片描述

#include <iostream>
using namespace std;
const int N = 50;
int g[N][N];
int dx[] = {-1,1},dy[] = {1,-1};
int main()
{
  int k = 1;
  for(int x = 1 ,y = 1 ,t = 0; x <= 20 || y <= 20 ; k++)
  {
      g[x][y] = k;
      int a = x + dx[t],b = y + dy[t];
      if(a < 1) 
      {
        t = 1;
        a = 1;
      }
      else if(b < 1) 
      {
        t = 0;
        b = 1;
      }
      x = a , y = b;
  }
  cout<<g[20][20]<<endl;
  return 0;
}
// 761

D、跑步锻炼(10分)

跑步锻炼 - 蓝桥云课 (lanqiao.cn)
在这里插入图片描述

要是是考试的时候,👴直接开日历来数,也就20年,360个月,我30s数一个月,也就180min,3h罢了,哈哈,开玩笑的,不许开摆!!!😡😡😡,这题很简单的

#include <iostream>
using namespace std;
int mouths[] = {0,31,28,31,30,31,30,31,31,30,31,30,31};
int main()
{
  int week = 6;
  int res = 0;
  for(int year = 2000 ; year <= 2020 ; year++)
  {
    int leap =  year % 100  && year % 4 == 0  || year % 400 == 0;  //  判断是否是闰年
    mouths[2] = 28 + leap;
    for(int mouth = 1 ; mouth <= 12 ; mouth++)
      for(int day = 1 ; day <= mouths[mouth] ; day++ )
      {
        
        if(week == 1 || day == 1) res += 2;
        else res += 1;
        week = (week + 1) % 7;  // 0 表示周日
        if(year == 2020 && mouth == 10 && day == 1)
        {
          cout<<res<<endl;
          return 0;
        }
      }
      
  }
  return 0;
}
// 7979

E、七段码(15分)

七段码 - 蓝桥云课 (lanqiao.cn)

在这里插入图片描述

SET + DFS,我看完别人的题解后,感觉自己在写💩,所以就copy了别人的

在这里插入图片描述

#include <iostream>
#include<set>
using namespace std;
int d[7][7];
int ans;
bool st[7];
set<set<int>> se;
void dfs(int x,set<int> s)
{
  if(!se.count(s))
  {
    se.insert(s);
    ans++;
  }
  if(s.size()==7) return;
  for(int i = 0 ; i < 7 ; i++)
  {
    if(st[i] || !d[x][i]) continue;   // 如果被搜索过或者之间没有边
    st[i] = true;
    s.insert(i);
    dfs(i,s);
    st[i] = false;
    s.erase(i);
  }
}
void add(int a,int b)
{
  d[a][b] = 1;
  d[b][a] = 1;
}

int main()
{
  // 0 和 1 加边
  add(0,1);
  // 0 和 5 加边
  add(0,5);
  // 1 和 6 加边
  add(1,6);
  // 1 和 2 加边
  add(1,2);
  // 2 和 6 加边
  add(2,6);
  // 2 和 3 加边
  add(2,3);
  // 3 和 4 加边
  add(3,4);
  // 4 和 6 加边
  add(4,6);
  // 4 和 5 加边
  add(4,5);
  // 5 和 6 加边
  add(5,6);

  set<int> s;
  for(int i = 0 ; i < 7 ; i++)
  {
    s.insert(i);
    st[i] = true;
    dfs(i,s);
    st[i] = false;
    s.erase(i);
  }
  cout<<ans<<endl;
  return 0;
}

F、成绩统计(15分)

在这里插入图片描述

【样例输入】

7
80
92
56
74
88
100
0

【样例输出】

71%
43%

【评测用规模与约定】

​ 对于 50% 的评测用例, 1 ≤ n ≤ 100 {1 \leq n \leq 100 } 1n100

​ 对于所有评测用例, 1 ≤ n ≤ 10000 {1 \leq n \leq 10000 } 1n10000

语法题
#include <iostream>
using namespace std;
int n;
int minN = 110,maxN = -1,sum;
int main()
{
  cin >> n;
  int a;
  for(int i = 0 ; i < n ; i++)
  {
    cin>>a;
    if(maxN < a) maxN = a;
    else if(minN > a) minN = a;
    sum += a;
  }
  printf("%d\n%d\n%.2lf\n",maxN,minN,sum * 1.0/ n);
  return 0;
}

G、回文日期(20分)

在这里插入图片描述

【样例输入】

20200202

【样例输出】

20211220
21211212

【评测用规模与约定】

​ 对于所有评测用例, 10000101 ≤ N ≤ 89991231 {10000101 \leq N \leq 89991231 } 10000101N89991231,保证N是一个合法日期的8位表示

模拟题,嗯造,就完事了,时间转换出了点问题,一直 没发现,卡了亿点顶时间

#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
int mouths[] = {31,28,31,30,31,30,31,31,30,31,30,31};
bool isValid(int year,int mouth,int day)
{
  if(mouth > 12 || mouth < 0) return false;
  if(mouth != 2)
  {
    
    if(mouths[mouth-1] < day)
      return false;
  }
  else
  {
      int leap = year % 100 && year % 4 == 0 || year % 400 == 0;
      if(mouths[mouth-1] + leap < day)
        return false;
  }
  return true;
}
int main()
{
  string date;
  cin>>date;
  int year = 0;
  for(int i = 0 ; i < 4 ; i++)
    year = year * 10 + (date[i] - '0');
  int dateMouth = ( date[4] - '0' ) * 10 + (date[5] - '0');
  int dateDay = ( date[6] - '0' ) * 10 + (date[7] - '0');
  for(int i = year ;  ; i++)      // 用i代替年来枚举
  {
    int mouth = i % 10 * 10 + i / 10 % 10 ;
    int day = i / 100 % 10 * 10 + i / 1000;
    if(i == year && mouth <= dateMouth && day <= dateMouth) continue;
    if(isValid(i, mouth , day ))
    {
      cout<<i * 10000 + mouth * 100 + day<<endl;
      break;
    }
  }
  // 枚举回文字年
  int ab = (date[0] - '0') * 10 + (date[1] - '0');
  int mm = (date[4] - '0') * 10 + (date[5] - '0');
  int abxx = ab * 100 + (date[2] - '0') * 10 + (date[3] - '0');
  
  for(int i = ab ; ; i++)
  {
    int a = i / 10;
    int b = i % 10;
    int newYear = a * 1000 + b * 100 + a * 10 + b;
    int newMouth = b * 10 + a;
    if(abxx > newYear) continue;    // 年月日比较,枚举的必须比它大
    if(abxx == newYear && mm >= newMouth) continue;
    if(isValid(newYear, newMouth, newMouth))
    {
      printf("%d%02d%02d\n",newYear,newMouth,newMouth);
      break;
    }
  }
  return 0;
}

H、子串分值和(20分)

在这里插入图片描述

I、平面切分(25分)

在这里插入图片描述

【样例输入】

20200202

【样例输出】

20211220
21211212

【评测用规模与约定】

​ 对于 50% 的评测用例, 1 ≤ V ≤ 100 {1 \leq V \leq 100 } 1V100

​ 对于所有评测用例, 1 ≤ V ≤ 10000 {1 \leq V \leq 10000 } 1V10000

J、字符串排序(25分)

在这里插入图片描述

【样例输入】

4

【样例输出】

bbaa

【样例输入】

100

【样例输出】

jihgfeeddccbbaa

【评测用规模与约定】

​ 对于 30% 的评测用例, 1 ≤ V ≤ 20 {1 \leq V \leq 20 } 1V20

​ 对于 50% 的评测用例, 1 ≤ V ≤ 100 {1 \leq V \leq 100 } 1V100

​ 对于所有评测用例, 1 ≤ V ≤ 10000 {1 \leq V \leq 10000 } 1V10000

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值