蓝桥真题讲解

本篇文章继续给大家讲解蓝桥真题

第一题

题目链接

0封闭图形个数 - 蓝桥云课

题目解析

代码原理

代码编写

#include <iostream>

#include<bits/stdc++.h>

using namespace std;

typedef long long ll;

const ll max_len = 200010;

struct node

{

  ll val;

  ll zero;

}a[max_len];

bool compare(node a, node b)

{

  if(a.zero != b.zero)

  {

    return a.zero < b.zero;

  }

  return a.val < b.val;

}

int main()

{

  // 请在此输入您的代码

  ios::sync_with_stdio(0);

  cin.tie(0);

  cout.tie(0);

  map<int,int> mp;

  mp[0] = mp[4] = mp[6] = mp[9] = 1, mp[8] = 2, mp[1] = mp[3] = mp[5] = mp[7] = mp[2] = 0;

  ll n = 0;

  cin >> n;

  for(ll i = 1; i <= n; i++)

  {

    cin >> a[i].val;

  }

  for(ll i = 1; i <= n; i++)

  {

    ll x = a[i].val, sum = 0;

    while(x)

    {

      sum += mp[x % 10];

      x /= 10;

    }

    a[i].zero = sum;

  }

  sort(a + 1, a + 1 + n, compare);

  for(ll i = 1; i <= n; i++)

  {

     cout << a[i].val << " ";

  }

  return 0;

}

本题总结

思路梳理:1.从题目中获取并列举出条件2.根据给出的例子去理解题目意思

代码总结:结构体代码思维、排序容器sort、容器map的创建与使用

第二题

题目链接

0回文数组 - 蓝桥云课

题目解析

代码原理

代码编写

#include<iostream>

#include<bits/stdc++.h>

using namespace std;

typedef long long ll;

const ll max_len = 100010;

ll a[max_len];

ll dif[max_len];

int main()

{

  ios::sync_with_stdio(0);

  cin.tie(0);

  cout.tie(0);

  ll n = 0;

  ll ret = 0;

  cin >> n;

  for(ll i = 1; i <= n; i++)

  {

    cin >> a[i];

  }

  for(ll i = 1; i <= n / 2; i++)

  {

     dif[i] = a[i] - a[n - i + 1];

  }

  for(ll i = 1; i <= n / 2; i++)

  {

      ret += abs(dif[i]);

      if(dif[i] < 0 && dif[i + 1] < 0) dif[i + 1] -= max(dif[i], dif[i + 1]);

      else if(dif[i] > 0 && dif[i + 1] > 0) dif[i + 1] -= min(dif[i], dif[i + 1]);

  }

  cout << ret;

  return 0;

}

本题总结

知识点:abs()函数是取绝对值

思路梳理:先读题,提取出题目条件后,进行画图,分情况讨论:分别是由大往小变和由小往大变

贪心策略:能一起加的时候绝不单独加

第三题

题目链接

0求和 - 蓝桥云课

题目解析

代码原理

因为这个数会很大,有可能超过int甚至是long long,普通的循环有可能行不通,因此我们要用上高中学的知识等差数列求和公式

公式:(首项 + 尾项)* 项数 / 2

由于这题的代码很简单相信各位小伙伴都是有实力的,因此博主也就不展示代码了。若真有问题,呃,私信我好吧。

本题总结

公式:(首项 + 尾项)* 项数 / 2

本篇文章的内容就先到这里,我们下期文章再见!

 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值