赞
踩
1.隔行变色
- '''
- 思路:由题意每行的颜色为 蓝 白 交替
- 第21行到50行之间共有50-21+1=30行
- '''
- result=(50-21+1)/2
- print(int(result))#15
2.立方尾不变
- '''
- 思路:将符合立方尾不变的数字存入列表,最后统计列表中数字的个数
- 通过对数字立方后的运算结果 转化为字符串 再进行分段切片处理
- 因为是10000以内的数字,我们可以把它分为10、100、1000、10000
- '''
- data=[]
- for i in range(1,10001):
- if i<10:
- if i==int(str(pow(i,3))[-1]):
- data.append(i)
- elif i<100:
- if i==int(str(pow(i,3))[-2:]):
- data.append(i)
- elif i<1000:
- if i==int(str(pow(i,3))[-3:]):
- data.append(i)
- elif i<10000:
- if i==int(str(pow(i,3))[-4:]):
- data.append(i)
-
- print(len(data)) #36
3.煤球数量
- '''
- 思路:
- 由题目可知道前4层数量分别为1 3 6 10
- 思路1:可以发现规律 本层数量=上一层数量+本层层数
- 思路2:每一层数量之间差值构成等差数列
- '''
- s,n=0,0 #s表示数量之和,n每层数量数
- for i in range(1,101):
- n+=i
- s+=n
- print(s) #171700
4.有奖竞猜
- '''
- 思路:
- 猜谜结果已经知道
- 开始777个币,猜错扣555个币
- 根据结果不存在扣光情况
- '''
- result='vxvxvxvxvxvxvvx'
- count=777 #初始币量
- wrong=555#猜错扣除币量
- for i in result:
- if i=='v':#如果猜对
- count*=2
- else:#如果猜错
- count-=wrong
- print(count) #58497
5.平方怪圈
- '''
- 思路:
- 正整数的每一位平方后再求和,得到的新整数继续这样操作。
- 直接进行暴力求解,当出现重复的数字的时候我们停止循环,我们将计算的数纳入列表并且将最后的数输出,我们就会看出那些在循环中,然后就可以直接看出最大
- 将每次计算的结果存入列表
- 再找出列表中最大值
- '''
-
- x = int(input())
- result = []#将每次计算的结果存入列表
- s = 0
- while s not in result:
- result.append(s)
- s = 0
- a = list(str(x))#将输入转化为字符串,便于每一位都平方后再求和
- for i in range(len(a)):
- s += int(a[i])**2
- x = s
-
- print(max(result)) #145
6.奇妙的数字
- '''
- 思路:将平方和立方后的数字拼接成为字符串,再将字符串转化为列表,再将列表中数字转化为整型,对列表中数字排序后再将其转化为字符串列表
- 最后将处理好的字符串拼接好,如果结果和目标字符串一样就输出该数字
- '''
- for i in range(1,10000):
- c=str(pow(i,2))+str(pow(i,3)) #将平方和立方后的数字拼接成为字符串
- d=[int(i) for i in c]#将列表中数字转化为整型
- l=[str(i) for i in sorted(d)]#列表中数字排序
- if ''.join(l)=='0123456789':
- print(i)#69
7.四平方和
- '''
- 思路:
- 先找到单个数字平方后的边界(平方后小于n)
- 通过逐个循环,并且在第二次以后的每一层循环加入判断
- '''
- import math
- n = int(input())
- x = int((math.sqrt(n)))+1 #找到单个数字平方后的边界(平方后小于n)
- ls = [pow(i,2) for i in range(0,x)]#用于确定d的存在
-
- for a in range(x):
- for b in range(a,x):
- if a*a+b*b>n:#排除前2个元素平方和大于n情况
- break
- for c in range(b,x):
- d=n-a*a-b*b-c*c
- if d<0:#排除前3个元素平方和大于n情况
- break
- elif d in ls:
- t=sorted([a,b,c,int(math.sqrt(d))])#对4个元素排序
- print(' '.join([str(i) for i in t]))
- exit()
8.移动距离
- '''
- 思路:
- 将小区看作一个矩阵,小区序号按照S形状分布
- 通过分析,若将m坐标看作(x1,y1) n坐标看作(x2,y2),则m和n之间最短距离为|x1-x2|-|y1-y2|
- '''
-
- w, m, n = map(int,input().split(' '))#6 8 2
- y = max(m,n)//w + 1 #找到矩阵中最大的行数
- jz = []
- res = []
- for i in range(y):
- temp = [j for j in range(w*i+1, w*(i+1)+1)]#按规则生成每行序列
- if i%2 == 0:
- jz.append(temp)
- else:
- temp = temp[::-1]
- jz.append(temp)
- if m in temp:#记录坐标
- res.append([temp.index(m)+1,i+1])
- if n in temp:#记录坐标
- res.append([temp.index(n)+1,i+1])
- # print(jz)
- print(abs(res[0][1]-res[1][1]) + abs(res[0][0]-res[1][0]))
9.冰雹数
- '''
- 思路:
- 判断输入数字的奇偶,分别执行不同的运算方法,并且将每次运算的结果写入列表,当运算的数字等于一以后,循环停止
- 将每个数字运算结果生成一个列表,再将每个数字生成的列表添加到result=[],通过循环result=[]找出最大的值,再将值存入max_result=[]
- 最后print(max(max_result))即可。
- '''
- nums=int(input())
- result=[]
- max_result=[]
-
- for num in range(1,nums+1):#遍历不大于N的每个数字
- inner=[]
- inner.append(num)
- while num!=1:
- if num%2==0:
- num/=2
- inner.append(int(num))
- else:
- num=num*3+1
- inner.append(int(num))
- result.append(inner)
- for res in result:
- max_result.append(max(res))
- print(max(max_result))
10.打印大X
- '''
- 思路:观察发现每行符号个数x=m+n-1,总共行数y=n
- 构造出一个输入m n大小的矩阵
- 通过循环画出x上半部分(包括中间),再画出x下半部分,最后拼接矩阵
- '''
-
- m,n=map(int,input().split())
- jz=[['.' for i in range(m+n-1)] for j in range(n)]#构造出一个输入m n大小的矩阵
- for x in range(int((n+1)/2)):#画出x上半部分(包括中间)
- for y in range(m):
- jz[x][x+y]='*'
- for y in range(-m-x,-x):
- jz[x][y] = '*'
- for x in range(int((n+1)/2),n):#画出x下半部分
- jz[x]=jz[n-x-1]
- for i in jz:
- print(''.join(i))
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。