蓝桥杯思维训练营(一)
文章目录
- 题目总览
- 题目详解
- 翻之
- 一起做很甜的梦
蓝桥杯的前几题用到的算法较少,大部分考察的都是思维能力,方法比较巧妙,所以我们要积累对应的题目,多训练
题目总览
翻之
一起做很甜的梦
题目详解
翻之
思维分析:
一开始比较难有思路,我们不可能一行行去翻转我们的行,然后去判断。
正确的思路:只要统计相同的列的数目就是所需的答案
原因:相同的列中,对于不是0的行是相同的,我们只要翻转对应的行即可实现列的全部的元素都为1
技巧:统计对应的列的数目,我们可以使用defaultdict字典进行存储,对于defaultdict(int),默认的值为0,并且该题还有一个可以使用一个翻转的操作(使用zip 和 *)
不理解这个二维列表的翻转的操作可以参考另一篇博客
from collections import defaultdict
n,m = map(int,input().split())
strnum = []
for i in range(n):
# 把输入的字符串拆分为单个的字符
getstr = list(input())
# 每组并入一个大的列表,形成二维列表
strnum.append(getstr)
# 列表转置
transposed_matrix = [list(row) for row in zip(*strnum)]
count = defaultdict(int)
ans = 0
for i in transposed_matrix:
# 合并字符
tmp = ''.join(i)
# 计数
count[tmp]+=1
# 记录最大值
ans = max(ans,count[tmp])
print(ans)
一起做很甜的梦
思路分析:
一开始的话,我的思路是想通过,一开始确定一个起始点,然后进行加减数目可以得到序列,但是进行实验之后,发现重复并不可避免
正确的思路
:发现偶数的n的时候,前面是偶数的排列,后面是奇数的排列,n为奇数的时候,前面是奇数排列,后面是偶数的排列
n = int(input())
# 当n 是偶数的时候,偶数放前面
# 当n 是奇数的时候,奇数放前面
ou = [i for i in range(1,n+1) if i%2==0]
ji = [i for i in range(1,n+1) if i%2==1]
if n%2 ==0:
# 偶数组合
ans = ou+ji
else:
# 奇数组合
ans = ji+ou
# 按格式输出
for i in ans:
print(i,end=' ')