第六届 蓝桥杯 省赛 第一题 奖券数目

有些人很迷信数字,比如带“4”的数字,认为和“死”谐音,就觉得不吉利。

虽然这些说法纯属无稽之谈,但有时还要迎合大众的需求。某抽奖活动的奖券号码是5位数(10000-99999),

要求其中不要出现带“4”的号码,主办单位请你计算一下,如果任何两张奖券不重号,最多可发出奖券多少张。

请提交该数字(一个整数),不要写任何多余的内容或说明性文字。

分析:从10000~99999,统计没有一位为4的数字的个数~结果为52488~

当然也可以不用代码解决~用排列组合~8*9*9*9*9=52488~

 

第七届 蓝桥杯 省赛 第九题 交换瓶子

有N个瓶子,编号 1 ~ N,放在架子上。
比如有5个瓶子:
2 1 3 5 4
要求每次拿起2个瓶子,交换它们的位置。
经过若干次后,使得瓶子的序号为:
1 2 3 4 5
对于这么简单的情况,显然,至少需要交换2次就可以复位。
如果瓶子更多呢?你可以通过编程来解决。
输入格式为两行:
第一行: 一个正整数N(N<10000), 表示瓶子的数目
第二行:N个正整数,用空格分开,表示瓶子目前的排列情况。
输出数据为一行一个正整数,表示至少交换多少次,才能完成排序。
例如,输入:
5
3 1 2 5 4
程序应该输出:
3
再例如,输入:
5
5 4 3 2 1
程序应该输出:
2
资源约定:
峰值内存消耗 < 256M
CPU消耗  < 1000ms

分析:遍历数组,如果当前位置的瓶子编号不对,就找到那个正确编号的瓶子交换过来,累加得到交换的次数cnt~

 

第七届 蓝桥杯 省赛 第八题 四平方和

四平方和定理,又称为拉格朗日定理:
每个正整数都可以表示为至多4个正整数的平方和。
如果把0包括进去,就正好可以表示为4个数的平方和。

比如:
5 = 0^2 + 0^2 + 1^2 + 2^2
7 = 1^2 + 1^2 + 1^2 + 2^2
(^符号表示乘方的意思)

对于一个给定的正整数,可能存在多种平方和的表示法。
要求你对4个数排序:
0 <= a <= b <= c <= d
并对所有的可能表示法按 a,b,c,d 为联合主键升序排列,最后输出第一个表示法

程序输入为一个正整数N (N<5000000)
要求输出4个非负整数,按从小到大排序,中间用空格分开

例如,输入:
5
则程序应该输出:
0 0 1 2

再例如,输入:
12
则程序应该输出:
0 2 2 2

再例如,输入:
773535
则程序应该输出:
1 1 267 838

资源约定:
峰值内存消耗 < 256M
CPU消耗 < 3000ms

分析:直接四层循环可能会超时,可以考虑先将两个数能构成的平方和保存在map里面,如果在前两层循环的时候,发现剩下的数并不能由两个数的平方构成,就直接continue跳过~否则就判断第三层循环,然后用sqrt(num – a * a – b * b – c * c)算出最后一个数temp,看它是否为整数~如果是整数就输出~并且退出程序~

 

 

第七届 蓝桥杯 省赛 第七题 剪邮票

剪邮票如【图1.jpg】, 有12张连在一起的12生肖的邮票。

现在你要从中剪下5张来,要求必须是连着的。
(仅仅连接一个角不算相连)
比如,【图2.jpg】,【图3.jpg】中,粉红色所示部分就是合格的剪取。

请你计算,一共有多少种不同的剪取方法。

分析:i1、i2、i3、i4和i5为枚举要剪下的5个数,对这五个数构成的连通性进行dfs判断,如果dfs后测得从i1出发从上下左右四个方向上深度优先搜索遍历为i2~i5之间的所有点,cnt标记i5能够走到的是i1~i5这些点的个数,如果cnt == 5就说明是连在一起的,注意从4和8向右行走走不到5和9,并且从5和9出发向左行走走不到4和8~所以遇到index == 4或者index == 8并且是向右走的时候continue~(index == 5和9并向左走同理~)将result加一~累加得到的result就是结果116~

 

 

第七届 蓝桥杯 省赛 第六题 方格填数(next_permutation)

填入0~9的数字。要求:连续的两个数字不能相邻。
(左右、上下、对角都算相邻)
一共有多少种可能填写的方案?
请填写表示方案数目的整数~

分析:从左到右从上到下标为0~9,将a[10]中的数字依次填入,所以只要将a数组从0123456789一直全排列试到9876543210,测试每一个结果是否满足,满足条件的次数累加得到的就是方案数目~答案是1580~

 

蓝桥杯 ALGO-149 算法训练 5-2求指数

问题描述
  已知n和m,打印n^1,n^2,…,n^m。要求用静态变量实现。n^m表示n的m次方。已知n和m,打印n^1,n^2,…,n^m。要求用静态变量实现。n^m表示n的m次方。(每行显示5个数,每个数宽为12,右对齐)
样例输入
一个满足题目要求的输入范例。
例:
3 8
样例输出
与上面的样例输入对应的输出。
例:

数据规模和约定
  输入数据中每一个数的范围。
  例:n^m小于int 的表示范围。

分析:用静态变量表示result和m,每次将m减一,result累乘并输出,以%12d的形式输出~