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

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

目录

一丶算式900(dfs)

二丶谈判(贪心)

三丶幸运数(模拟)

四丶123(前缀和)


一丶算式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<<"("<<sum<<"-"<<num<<")"<<"*"<<z<<"="<<"900";
			}
		}
	}
	for(int i=0;i<n;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]<n)
        {
            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<maxn;i++)
	{
        if(d<k)
		{
			a[i]=d;
			d++;
        }
		else
		{
			i--;
			d=1;
			k++;
        }
    }
    w[1]=a[1];
    for(int i=2;i<maxn;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<z;i++)
    {
    	cout<<c[i]<<endl;
	}
	return 0;
}
  • 9
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论
蓝桥杯是一个国内著名的计算机比赛,为了帮助参赛者更好地准备和了解比赛的题型,组委会会公布历年的真题并提供相应的题解。 首先,我们需要了解蓝桥杯是一个综合性的计算机比赛,测试的对象包括计算机基础知识、编程能力以及解决实际问题的能力。 在历年的真题中,参赛者将面临不同类型的题目,包括算法设计与优化问题、数据结构算法问题、编程题等。其中针对Python B组的题目主要考察的是对Python语言的掌握和应用能力。 题目解答一般会包含以下几个方面的内容: 1. 题目分析与理解:读取题目,理解题目的要求和限制条件。通过仔细分析题目,确定题目的输入与输出,以及问题的核心。 2. 设计解决方案:根据题目要求和限制条件,设计一个合适的解决方案。可以使用合适的算法数据结构来解决问题,并做出相应的性能优化。 3. 编写代码实现:根据设计的方案编写相应的代码实现。需要注意的是,Python语言有其独特的语法和特性,掌握好这些特性可以更好地完成编程任务。 4. 调试与测试:编写完代码后,需要进行调试和测试。通过运行样例输入和输出,检查代码是否符合题目要求,并且没有逻辑上的错误。 5. 总结与优化:在完成题目解答后,可以进行总结和优化。包括分析算法复杂度、代码风格和可读性等方面,以便在比赛中更好地表现。 在准备蓝桥杯时,可以通过阅读历年的真题和题解来了解比赛的难度和类型,针对性地进行练习和提高。同时也可以参加相关的培训班和讨论活动,与其他参赛者交流经验和技巧。 总而言之,历年蓝桥杯真题的解答对于提高自己的编程能力和应对比赛非常有帮助。通过认真分析和实践,可以更好地理解并掌握Python编程,并在比赛中取得更好的成绩。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

cloud、泡泡

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值