当前位置:   article > 正文

蓝桥杯部分题目 python实现_立方尾不变

立方尾不变

1.隔行变色

  1. '''
  2. 思路:由题意每行的颜色为 蓝 白 交替
  3. 第21行到50行之间共有50-21+1=30行
  4. '''
  5. result=(50-21+1)/2
  6. print(int(result))#15

2.立方尾不变

  1. '''
  2. 思路:将符合立方尾不变的数字存入列表,最后统计列表中数字的个数
  3. 通过对数字立方后的运算结果 转化为字符串 再进行分段切片处理
  4. 因为是10000以内的数字,我们可以把它分为10、100、1000、10000
  5. '''
  6. data=[]
  7. for i in range(1,10001):
  8. if i<10:
  9. if i==int(str(pow(i,3))[-1]):
  10. data.append(i)
  11. elif i<100:
  12. if i==int(str(pow(i,3))[-2:]):
  13. data.append(i)
  14. elif i<1000:
  15. if i==int(str(pow(i,3))[-3:]):
  16. data.append(i)
  17. elif i<10000:
  18. if i==int(str(pow(i,3))[-4:]):
  19. data.append(i)
  20. print(len(data)) #36

3.煤球数量

  1. '''
  2. 思路:
  3. 由题目可知道前4层数量分别为1 3 6 10
  4. 思路1:可以发现规律 本层数量=上一层数量+本层层数
  5. 思路2:每一层数量之间差值构成等差数列
  6. '''
  7. s,n=0,0 #s表示数量之和,n每层数量数
  8. for i in range(1,101):
  9. n+=i
  10. s+=n
  11. print(s) #171700

4.有奖竞猜

  1. '''
  2. 思路:
  3. 猜谜结果已经知道
  4. 开始777个币,猜错扣555个币
  5. 根据结果不存在扣光情况
  6. '''
  7. result='vxvxvxvxvxvxvvx'
  8. count=777 #初始币量
  9. wrong=555#猜错扣除币量
  10. for i in result:
  11. if i=='v':#如果猜对
  12. count*=2
  13. else:#如果猜错
  14. count-=wrong
  15. print(count) #58497

5.平方怪圈

  1. '''
  2. 思路:
  3. 正整数的每一位平方后再求和,得到的新整数继续这样操作。
  4. 直接进行暴力求解,当出现重复的数字的时候我们停止循环,我们将计算的数纳入列表并且将最后的数输出,我们就会看出那些在循环中,然后就可以直接看出最大
  5. 将每次计算的结果存入列表
  6. 再找出列表中最大值
  7. '''
  8. x = int(input())
  9. result = []#将每次计算的结果存入列表
  10. s = 0
  11. while s not in result:
  12. result.append(s)
  13. s = 0
  14. a = list(str(x))#将输入转化为字符串,便于每一位都平方后再求和
  15. for i in range(len(a)):
  16. s += int(a[i])**2
  17. x = s
  18. print(max(result)) #145

6.奇妙的数字

  1. '''
  2. 思路:将平方和立方后的数字拼接成为字符串,再将字符串转化为列表,再将列表中数字转化为整型,对列表中数字排序后再将其转化为字符串列表
  3. 最后将处理好的字符串拼接好,如果结果和目标字符串一样就输出该数字
  4. '''
  5. for i in range(1,10000):
  6. c=str(pow(i,2))+str(pow(i,3)) #将平方和立方后的数字拼接成为字符串
  7. d=[int(i) for i in c]#将列表中数字转化为整型
  8. l=[str(i) for i in sorted(d)]#列表中数字排序
  9. if ''.join(l)=='0123456789':
  10. print(i)#69

7.四平方和

  1. '''
  2. 思路:
  3. 先找到单个数字平方后的边界(平方后小于n)
  4. 通过逐个循环,并且在第二次以后的每一层循环加入判断
  5. '''
  6. import math
  7. n = int(input())
  8. x = int((math.sqrt(n)))+1 #找到单个数字平方后的边界(平方后小于n)
  9. ls = [pow(i,2) for i in range(0,x)]#用于确定d的存在
  10. for a in range(x):
  11. for b in range(a,x):
  12. if a*a+b*b>n:#排除前2个元素平方和大于n情况
  13. break
  14. for c in range(b,x):
  15. d=n-a*a-b*b-c*c
  16. if d<0:#排除前3个元素平方和大于n情况
  17. break
  18. elif d in ls:
  19. t=sorted([a,b,c,int(math.sqrt(d))])#对4个元素排序
  20. print(' '.join([str(i) for i in t]))
  21. exit()

8.移动距离

  1. '''
  2. 思路:
  3. 将小区看作一个矩阵,小区序号按照S形状分布
  4. 通过分析,若将m坐标看作(x1,y1) n坐标看作(x2,y2),则m和n之间最短距离为|x1-x2|-|y1-y2|
  5. '''
  6. w, m, n = map(int,input().split(' '))#6 8 2
  7. y = max(m,n)//w + 1 #找到矩阵中最大的行数
  8. jz = []
  9. res = []
  10. for i in range(y):
  11. temp = [j for j in range(w*i+1, w*(i+1)+1)]#按规则生成每行序列
  12. if i%2 == 0:
  13. jz.append(temp)
  14. else:
  15. temp = temp[::-1]
  16. jz.append(temp)
  17. if m in temp:#记录坐标
  18. res.append([temp.index(m)+1,i+1])
  19. if n in temp:#记录坐标
  20. res.append([temp.index(n)+1,i+1])
  21. # print(jz)
  22. print(abs(res[0][1]-res[1][1]) + abs(res[0][0]-res[1][0]))

9.冰雹数

  1. '''
  2. 思路:
  3. 判断输入数字的奇偶,分别执行不同的运算方法,并且将每次运算的结果写入列表,当运算的数字等于一以后,循环停止
  4. 将每个数字运算结果生成一个列表,再将每个数字生成的列表添加到result=[],通过循环result=[]找出最大的值,再将值存入max_result=[]
  5. 最后print(max(max_result))即可。
  6. '''
  7. nums=int(input())
  8. result=[]
  9. max_result=[]
  10. for num in range(1,nums+1):#遍历不大于N的每个数字
  11. inner=[]
  12. inner.append(num)
  13. while num!=1:
  14. if num%2==0:
  15. num/=2
  16. inner.append(int(num))
  17. else:
  18. num=num*3+1
  19. inner.append(int(num))
  20. result.append(inner)
  21. for res in result:
  22. max_result.append(max(res))
  23. print(max(max_result))

10.打印大X

  1. '''
  2. 思路:观察发现每行符号个数x=m+n-1,总共行数y=n
  3. 构造出一个输入m n大小的矩阵
  4. 通过循环画出x上半部分(包括中间),再画出x下半部分,最后拼接矩阵
  5. '''
  6. m,n=map(int,input().split())
  7. jz=[['.' for i in range(m+n-1)] for j in range(n)]#构造出一个输入m n大小的矩阵
  8. for x in range(int((n+1)/2)):#画出x上半部分(包括中间)
  9. for y in range(m):
  10. jz[x][x+y]='*'
  11. for y in range(-m-x,-x):
  12. jz[x][y] = '*'
  13. for x in range(int((n+1)/2),n):#画出x下半部分
  14. jz[x]=jz[n-x-1]
  15. for i in jz:
  16. print(''.join(i))

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/繁依Fanyi0/article/detail/196831
推荐阅读
相关标签
  

闽ICP备14008679号