生成回文数
题目描述
本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可。
所谓回文数就是左右对4qq称的数字,比如:
585,5885,123321...
当然,单个的数字也可以算作是对称的。
小明发现了一种生成回文数的方法: 比如,取数字19把它与自己的翻转数相加:19 + 91 = 110,如果不是回文数,就再进行这个过程:110+011=121 这次是回文数了。
200 以内的数字中,绝大多数都可以在 30 步以内变成回文数,只有一个数字很特殊,就算迭代了 1000 次,它还是顽固地拒绝回文!
请你输出该顽固数字。
运行限制
最大运行时间:1s
最大运行内存: 128M
分析
- 模拟过程,判断回文和生成回文数是基本模板
- 对1到200的数逐一进行判断,内部循环最大次数30次,如果有循环到第30次的直接输出即可
运行代码
# 判断回文
def huiwen(s):
left = 0
right = len(s)-1
while left <= right:
if s[left] != s[right]:
return False
left+=1
right-=1
return True
# 生成回文数
def hui(s):
t = ""
for i in range(len(s)-1,-1,-1):
t += s[i]
return t
for i in range(1,201):
t = i
for j in range(30):
num = int(t)+int(hui(str(t)))
t = num
if huiwen(str(num)):
break
if j == 29:
print(i)
通过截图
连号区间数
题目描述
小明这些天一直在思考这样一个奇怪而有趣的问题:
在 1 ~ N 的某个全排列中有多少个连号区间呢?
这里所说的连号区间的定义是:
如果区间 [L,R] 里的所有元素(即此排列的第 L 个到第 R 个元素)递增排序后能得到一个长度为 R-L+1 的"连续"数列,则称这个区间连号区间。
当 N 很小的时候,小明可以很快地算出答案,但是当 N 变大的时候,问题就不是那么简单了,现在小明需要你的帮助。
输入描述
第一行是一个正整数 N(1≤N≤50×10^4), 表示全排列的规模。
第二行是 N 个不同的数字 Pi(1≤Pi≤N),表示这 N 个数字的某一全排列。
输出描述
输出一个整数,表示不同连号区间的数目。
输入输出样例
示例
输入
4
3 2 4 1
输出
7
运行限制
最大运行时间:5s
最大运行内存: 64M
分析
- 题目是真不好理解,直接可以用上面的图去理解。(不太懂为什么一个数也算递增排序)
- 这题很容易想到暴力,我们其实只要找到最大值和最小值,然后如果最大值减最小值等于区间位置之差,那么就一定是满足条件的。
这里需要注意,全排列数字是不重复的
运行代码
n = int(input())
nums = list(map(int,input().split()))
res = 0
for i in range(n):
Max = nums[i]
Min = nums[i]
for j in range(i,n):
if nums[j] > Max:
Max = nums[j]
if nums[j] < Min:
Min = nums[j]
if j-i == Max-Min:
res+=1
print(res)
通过截图
如有错误,敬请指正,欢迎交流,谢谢♪(・ω・)ノ