蓝桥杯真题31日冲刺国一 | 每日题解报告 第十五天

简介: 大家好我是泡泡,今天继续给大家带来题解

一、算式900(dfs)


题目链接:算式900 - 蓝桥云课 (lanqiao.cn)


题目要求:


小明的作业本上有道思考题:


看下面的算式:


(□□□□-□□□□)*□□=900


其中的小方块代表 00 ~ 9 的数字,这 10 个方块刚好包含了 0 ~ 9 中的所有数字。 注意:0 不能作为某个数字的首位。


小明经过几天的努力,终于做出了答案!如下:


(5012-4987)*36=900


用计算机搜索后,发现还有另外一个解,本题的任务就是:请你算出这另外的一个解。


注意:输出格式需要与示例严格一致; 括号及运算符号不要用中文输入法; 整个算式中不能包含空格。


解题思路:


先全排列出九个数字,然后判断首位是否为0或五,如果不是就把数组里边前四个 后四个 最后两个取出来判断就好啦。


#include<bits/stdc++.h>
using namespace std;
int n = 10;
int a[1010],b[1010];
int sum,num,z;
void dfs(int x)
{
  if(x>9)
  {
  if(a[0]==0||a[4]==0||a[8]==0||a[0]==5)
  {
    return ;
  }
  else
  {
    sum=a[0]*1000+a[1]*100+a[2]*10+a[3];
    num=a[4]*1000+a[5]*100+a[6]*10+a[7];
    z=a[8]*10+a[9];
    if((sum-num)*z==900)
    {
    cout<<"("<
    }
  }
  }
  for(int i=0;i
  {
  if(!b[i])
  {
    a[x] = i;
    b[i] = 1;
    dfs(x+1);
    b[i] = 0;   
  }
  }
}
int main()
{
  dfs(0);
  return 0;
}


二、谈判(贪心)


题目链接:谈判 - 蓝桥云课 (lanqiao.cn)


题目要求:


在很久很久以前,有 n 个部落居住在平原上,依次编号为 1 到 n。第 i 个部落的人数为 ti。


有一年发生了灾荒。年轻的政治家小蓝想要说服所有部落一同应对灾荒,他能通过谈判来说服部落进行联合。


每次谈判,小蓝只能邀请两个部落参加,花费的金币数量为两个部落的人数之和,谈判的效果是两个部落联合成一个部落(人数为原来两个部落的人数之和)。


解题思路:


用排序把数组从小到大排序,每次让最小的两个相加即可。


#include<bits/stdc++.h>
using namespace std;
int a[10010];
int main()
{
  int n;
  cin>>n;
  for(int i=1;i<=n;i++)
  {
  cin>>a[i];
  }
  int sum = 0;
  sort(a+1,a+1+n);
  int num = a[1];
  for(int i=2;i<=n;i++)
  {
  num = a[i] + num;
  sum += num;
  }
  cout<<sum;
  return 0;
}


三、幸运数(模拟)


题目链接:幸运数 - 蓝桥云课 (lanqiao.cn)


题目要求:


幸运数是波兰数学家乌拉姆命名的。它采用与生成素数类似的"筛法"生成。


首先从 1 开始写出自然数 1,2,3,4,5,6,⋯


1 就是第一个幸运数。


我们从 2 这个数开始。把所有序号能被 2 整除的项删除,变为:


1 3 5 7 9⋯


把它们缩紧,重新记序,为:


1 3 5 7 9⋯


这时,3 为第 2个幸运数,然后把所有能被 3 整除的序号位置的数删去。注意,是序号位置,不是那个数本身能否被 33 整除!删除的应该是 5,11,17,⋯


此时 7 为第 3 个幸运数,然后再删去序号位置能被 7 整除的( 19,39,⋯)


最后剩下的序列类似:


1, 3, 7, 9, 13, 15, 21, 25, 31, 33, 37, 43, 49, 51, 63, 67, 69, 73, 75, 79


解题思路:


模拟模拟模拟模拟 这题代码复杂但是题目不难


#include<bits/stdc++.h>
using namespace std;
int a[100010],b[100010];
int p=2,n,m,sum,nn,mm;
int main()
{
    cin>>m>>n;
    a[0]=-1;
    for(int i=1;i<=n;i++)
    {
        a[i] = a[i-1]+2;
    }
    nn=n;
    while(p+a[p]<=nn)
    {
        mm=1;
        for(int i=1;i<=nn;i++)
        {
            if(i%a[p])
            {
                b[mm++] = a[i];
            }
        }
        nn = mm - 1;
        for(int i=1;i<=nn;i++)
        {
            a[i] = b[i];
        }
        p++; 
    }
    for(int i=1;i<=nn;i++)
    {
        if(a[i]>m&&a[i]
        {
            sum++;
        }
    }
    cout<<sum;
    return 0;
}


四、123(前缀和)


题目链接:123 - 蓝桥云课 (lanqiao.cn)


题目要求:


小蓝发现了一个有趣的数列,这个数列的前几项如下:


1,1,2,1,2,3,1,2,3,4,⋯


小蓝发现,这个数列前 1 项是整数 1,接下来 2 项是整数 1 至 2,接下来 3 项是整数 1 至 3,接下来 4 项是整数 1 至 4,依次类推。


小蓝想知道,这个数列中,连续一段的和是多少。


解题思路:


前缀和和数组,这个数据太大爆的心态炸了,这个码能拿70-80分把估计


#include<bits/stdc++.h> 
using namespace std;
const int maxn=1e8+10;
int a[maxn],w[maxn],c[maxn];
int main()
{
    int k=1,d=1;
    for(int i=1;i
  {
        if(d
  {
    a[i]=d;
    d++;
        }
  else
  {
    i--;
    d=1;
    k++;
        }
    }
    w[1]=a[1];
    for(int i=2;i
  {
        w[i]=w[i-1]+a[i];
    }
    int t;
    cin>>t; 
    int x,y;
    int z = 0;
    while(t--)
  {
        cin>>x>>y;
        if(x==y)
  {
            c[z++] = a[x];
        }
  else
  {
            c[z++] = w[y]-w[x]+a[x];
        }
    }
    for(int i=0;i
    {
      cout<<c[i]<<endl;
  }
  return 0;
}


目录
相关文章
|
存储
【蓝桥杯冲刺】蓝桥杯12届省赛C++b组真题-填空题
【蓝桥杯冲刺】蓝桥杯12届省赛C++b组真题-填空题
104 1
|
测试技术
【蓝桥杯冲刺】蓝桥杯13届省赛C++b组真题-A~E题
【蓝桥杯冲刺】蓝桥杯13届省赛C++b组真题-A~E题
143 0
|
人工智能 测试技术 BI
【蓝桥杯冲刺】蓝桥杯11届省赛C++b组真题-编程题
【蓝桥杯冲刺】蓝桥杯11届省赛C++b组真题-编程题
110 0
【蓝桥杯冲刺】蓝桥杯11届省赛C++b组真题-填空题
【蓝桥杯冲刺】蓝桥杯11届省赛C++b组真题-填空题
126 0
【蓝桥杯冲刺】日期类专题特训
【蓝桥杯冲刺】日期类专题特训
45 0
|
人工智能 测试技术
【蓝桥杯冲刺】蓝桥杯12届省赛C++b组真题-编程题
【蓝桥杯冲刺】蓝桥杯12届省赛C++b组真题-编程题
107 0
|
机器学习/深度学习 存储 测试技术
蓝桥杯冲刺-倒数第八天-省赛题
蓝桥杯冲刺-倒数第八天-省赛题
115 0
|
机器学习/深度学习 Python
【蓝桥杯真题】16天冲刺 Python
【蓝桥杯真题】16天冲刺 Python
217 0
【蓝桥杯真题】16天冲刺 Python
|
算法 Python 容器
【蓝桥杯真题】18天Python组冲刺 心得总结
【蓝桥杯真题】18天Python组冲刺 心得总结
182 0
【蓝桥杯真题】18天Python组冲刺 心得总结
蓝桥杯倒数七天冲刺国一之每日复习第六天
大家好,我是泡泡,今天是复习第六天!今天有事,稍微水一下
105 0