蓝桥真题讲解

温馨提示:本系列文章非所有题都对对b组适用,b组的小伙伴请挑题看! 

目录

第一题

题目链接

题目解析

代码原理

代码编写

本题总结

第二题

题目链接

题目解析

代码原理

代码编写

本题总结

第三题

题目链接

题目解析

代码原理

代码编写

本题总结

第四题

题目链接

题目解析

代码原理

如何找规律?

代码编写

本题总结

第五题

题目链接

题目解析

代码原理

代码编写

第六题

题目链接

题目解析

代码原理

代码编写

代码一

代码二

代码优化

本题总结

1.题目特征的总结

2.函数总结

3.全排列模板总结

第七题

题目链接

题目解析

代码原理

代码编写

代码一

代码二

本题总结


第一题

题目链接

0奇妙的数字 - 蓝桥云课

题目解析

代码原理

对于零基础小白而言,平方和立方都不是难事,用个pow()函数就可以解决,实在不会还有i * i * i这种方式解决。这里对零基础小白而言博主盲猜应该是如何判断,其实很简单,我们可以将平方和立方后得到结果转为字符串,然后将两个字符串拼接在一起,最后去判断长度即可,但是也会有小伙伴问那重复了怎么办,很简单使用set容器即可,这里建议新加入的小白可以先去看一下下面这篇文章

文章链接 

C++STL初识和各大容器详解-优快云博客

代码编写

#include<iostream>

#include<bits/stdc++.h>

typedef long long ll;

using namespace std;

bool check(string ret)

{

  set<char> d;

  for(int i = 0; i < ret.size(); i++)

  {

    d.insert(ret[i]);

  }

  return ret.size() == 10 && d.size() == 10;

}

int main()

{

  ll n = 100000;

  string s1, s2;

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

  {

    ll tmp = i * i;

    s1 = to_string(tmp);

    tmp = i * i * i;

    s2 = to_string(tmp);

    string ret = s1 + s2;

    if(check(ret))

    {

      cout << i;

      break;

    }

  }

  return 0;

}

本题总结

第二题

题目链接

题目解析

代码原理

代码编写

#include<iostream>

#include<bits/stdc++.h>

using namespace std;

int main()

{

  ios::sync_with_stdio(0);

  cin.tie(0);

  cout.tie(0);

  int n = 0;

  cin >> n;

  int ret = n;

  while(n >= 3)

  {

    int new_bottles = n / 3;

    ret += new_bottles;

    n = n % 3 + new_bottles;

  }

  cout << ret;

  return 0;

}

本题总结

本题其实没有什么可以总结的,但是在做题上还是有东西可以总结的,有的小伙伴可能读完题目就发呆了,不知道干什么,那么今天博主带大家解决一下这类问题。

1.在读题的时候,我们可以记录一下一些有用的信息

2.需要画图的时候,就一定要画图,不要凭借脑子在那里空想

3.根据自己的图解,进行编写代码

4.如果出现报错,那么先去看一下报错信息(这里可能就需要一点英语词汇量了,这个自行解决),如果是timeout之类的词说明超时了,那么你就需要重新去检查代码,看看哪里死循环了,当然不是所有的超时都是死循环,有的是超过了题目所规定的时长,那么这个就是时间复杂度上的问题了,那么又会有小伙伴问了,那我看代码,具体该怎么看呢?我们把自己当成计算机,一步一步地去执行每一行代码即可。

第三题

题目链接

题目解析

代码原理

代码编写

本题总结

第四题

题目链接

题目解析

代码原理

如何找规律?

 观察数字之间的关系,是不是求和、指数,以及两者之间的差值是否存在什么关系

代码编写

#include<iostream>
#include<bits/stdc++.h>
using namespace std;
int main()
{
    int sum = 1, i = 1, j = 2;
    for(int t = 2; t <= 100; t++)
    {
        sum += i + j;
        i += j; //更新i
        j++;//更新j 
     } 
     cout << sum << endl; 
    return 0;
}

本题总结

第五题

题目链接

题目解析

代码原理

代码编写

第六题

题目链接

0寒假作业 - 蓝桥云课

题目解析

代码原理

全排列 + 判断

代码编写

代码一

#include<iostream>
#include<bits/stdc++.h>
using namespace std;
int a[] = {1,2,3,4,5,6,7,8,9,10,11,12,13}; 
int ans;
bool judge()
{
    if(a[0] + a[1] == a[2] && a[3] - a[4] == a[5] && a[6] * a[7] == a[8] && a[9] % a[10] == 0 && a[9] / a[10] == a[11])
       return true;
    return false;
}
int main()
{
    do{
        if(judge())
          ans++;
    }while(next_permutation(a, a + 13));
    cout << ans;
    return 0;
}

代码二

#include<iostream>
#include<bits/stdc++.h>
using namespace std;
int a[] = {1,2,3,4,5,6,7,8,9,10,11,12,13}; 
int ans;
bool judge()
{
    if(a[0] + a[1] == a[2] && a[3] - a[4] == a[5] && a[6] * a[7] == a[8] && a[9] % a[10] == 0 && a[9] / a[10] == a[11])
       return true;
    return false;
}
void f(int n)
{
    int tmp = 0;
    if(n == 13)
    {
        if(judge())
         ans++;
    }
    for(int i = n; i < 13; i++)
    {
        {tmp = a[i]; a[i] = a[n]; a[n] = tmp;}//回溯 
        f(n + 1);//递归 
        {tmp = a[i]; a[i] = a[n]; a[n] = tmp;}//回溯 
    }

}
int main()
{
    f(0);
    cout << ans;
    return 0;
}

//以上两段代码仅适合用于填空题(会超时)

代码优化

#include<iostream>

#include<bits/stdc++.h>

using namespace std;

int a[] = {1,2,3,4,5,6,7,8,9,10,11,12,13}; 

int ans;

bool judge()

{

  if(a[0] + a[1] == a[2] && a[3] - a[4] == a[5] && a[6] * a[7] == a[8] && a[9] % a[10] == 0 && a[9] / a[10] == a[11])

     return true;

  return false;

}

void f(int n)

{

  int tmp = 0;

  if(n == 13)

  {

    if(judge())

     ans++;

  }

  for(int i = n; i < 13; i++)

  {

    //全排列

    {tmp = a[i]; a[i] = a[n]; a[n] = tmp;}//回溯 

    if((n == 2 && a[0] + a[1] != a[2]) || (n == 5 && a[3] - a[4] != a[5]))

    {

      {tmp = a[i]; a[i] = a[n]; a[n] = tmp;}//回溯 

      continue;

    }

    f(n + 1);//递归 

    {tmp = a[i]; a[i] = a[n]; a[n] = tmp;}//回溯 

  }

}

int main()

{

    f(0);

  cout << ans;

  return 0;

}

本题总结

1.题目特征的总结

1.元素集合明确

2.不同排列顺序会产生不同结果,且都需要考虑

2.函数总结

next_permutation(起始位置,终点位置)、

作用:全排列

3.全排列模板总结

for(int i = 形参; i  < 最大值【这里的最大值看题意】; i++)

{
  {交换}

  函数名(形参 + 1);//递归

   {交换}//回溯

}

第七题

题目链接

题目解析

代码原理

特征识别: 1.元素唯一性2.顺序相关性

依据:

方法:全排列 

代码编写

代码一

#include<iostream>
#include<bits/stdc++.h>
using namespace std;
int a[] = {1,2,3,4,5,6,7,8,9};
int ans; 
bool judge()
{
    int x = a[3] * 100 + a[4] * 10 + a[5];
    int y = a[6] * 100 + a[7] * 10 + a[8]; 
    if((a[2] * x + a[1] * y) % (a[2] * y) == 0&& a[0] + (a[2] * x + a[1] * y) / (a[2] * y) == 10)
    return true;
    return false;
}
int main()
{
    do
    {
        if(judge())
        ans++;
    }while(next_permutation(a, a + 9));
    cout << ans;
    return 0;
 } 

代码二

#include<iostream>
#include<bits/stdc++.h>
using namespace std;
int a[] = {1,2,3,4,5,6,7,8,9};
int ans; 
bool judge()
{
    int x = a[3] * 100 + a[4] * 10 + a[5];
    int y = a[6] * 100 + a[7] * 10 + a[8]; 
    if((a[2] * x + a[1] * y) % (a[2] * y) == 0&& a[0] + (a[2] * x + a[1] * y) / (a[2] * y) == 10)
    return true;
    return false;
}
void f(int n)
{
    if(n == 9)
    {
        if(judge())
        ans++;
    }
    for(int i = n; i < 9; i++)
    {
        {int tmp = a[i]; a[i] = a[n]; a[n] = tmp;}
        f(n + 1);
        {int tmp = a[i]; a[i] = a[n]; a[n] = tmp;}
    }
}
int main()
{
    f(0);
    cout << ans;
    return 0;
 } 

本题总结

同第六题

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

### Scratch蓝桥杯考级真题概述 对于希望参加Scratch蓝桥杯考级的学生来说,准备过程中最重要的资源之一就是历年的真题。这些真题不仅能够帮助学生熟悉考试的形式和难度,还能通过实际操作加深对知识点的理解。 #### 利用真题进行针对性训练 针对不同级别的考生,存在专门设计的真题集来满足需求: - **初级阶段**:适合刚开始接触Scratch编程的小朋友,主要侧重于基本概念的学习以及简单程序的设计[^1]。 对于此级别而言,官方提供了大量入门级的教学材料和支持文档,包括但不限于零基础学习scratch3.0【入门教学 免费】这样的在线课程,旨在引导初学者逐步掌握必要的技能。 - **中级阶段**:当孩子们已经具备了一定的基础后,则可以尝试挑战更复杂的项目,并参与省级或国家级别的竞赛活动。 此类赛事通常会提供详细的试题解析和服务支持,例如历届蓝桥杯scratch国赛/省赛真题解析等资料,有助于参赛者更好地理解评分标准并优化自己的作品。 - **高级阶段**:面向那些希望通过更高层次的比赛检验自己实力的同学,在此之前充分复习过往几年内的难题是非常有益处的做法。 特别提到的是,有关STEMA选拔赛、科技素养测试等方面的练习同样不可忽视;同时还有像小兔子老师scratch编程系列课程这样专业的指导可以帮助提升综合能力。 具体到某一道题目上,比如关于方向控制与盖章功能的应用案例中指出,“-90方向为左边”,这意味着角色将朝向左侧移动。“盖章之后在原地有一个圆点,然后移动100步在左边又有一个圆点”的描述说明了两次不同的位置标记过程,最终得出选项A作为正确答案[^2]。 而在另一个例子当中涉及到变量n的变化规律及其影响范围:“循环第一次之后n=5,此时可以看到2只,循环第二次时n已经是5了不进入内循环”。这表明随着条件判断语句的作用域改变,后续执行路径也会相应调整,因此选择项B被确认为准确解答[^3]。 ```python # Python伪代码示例(仅用于解释逻辑) def example_function(): n = 8 count = 0 while True: if n >= 6: break for i in range(n): count += 1 n -= 1 return count == 2 ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值