一、给定一个包含n+1个整数的数组nums,其数字在1到n之间(包含1和n),可知至少存在一个重复的整数,假设只有一个重复的整数,请找出这个重复的数
#存字典,如果不在就存进去,在就重复
'''
nums = [1,3,4,2,2]
repeatDict = {}
for num in nums:
if num not in repeatDict:
repeatDict[num] = 1
else:
print(num)
'''
#先排序,然后看相邻的两个位置是否一样
'''
nums.sort()
pre = nums[0]
n = len(nums)
for index in range(1, n):
if pre == nums[index]:
print (pre)
pre = nums[index]
'''
nums.sort()
for i in range(len(nums)-1):
if nums[i] == nums[i+1]:
print(nums[i])
二、1-n,有序数组寻找缺少的数字
'''
def search_missing_item(A):
n = len(A)
left = 0
right = n - 1
mid = 0
while (left < right):
mid = left + (right - left) // 2
if (A[mid] - mid == A[0]):
if (A[mid + 1] - A[mid] > 1):
return A[mid] + 1
else:
left = mid + 1
else:
if (A[mid] - A[mid - 1] > 1):
return A[mid] - 1
else:
right = mid - 1
return -1
A = [1, 2, 3, 4, 6, 7, 8, 9]
print(search_missing_item(A))
'''
'''
先给一个值x=0,x和0-n中所有数异或,与数组异或。x就是缺少的数字
我们将nums中所有数异或,再与,那么最后的结果就是只出现了一次,
在0-n中出现,在nums中消失的数字,就是答案。
nums = [1, 2, 3, 4, 6, 7, 8, 9]
N = len(nums)
ans = nums[0]
# 遍历一遍N+1个数
for i in range(0, N+1):
ans ^= i
# 遍历一遍输入数组
for i in range(1, N-1):
ans ^= nums[i]
print(ans)
#求和
nums = [1, 2, 3, 4, 6, 7, 8, 9]
N = len(nums)+1 # 计算现有长度数组长度N
Sum = (N)*(N+1)/2 # 计算目标数组[0, 1, 2, ..., N]的和,即(0+N)*(N+1)/2
Sum_now = sum(nums) # 计算当前缺失数组的总和
print(Sum - Sum_now ) # 目标数组总和与缺失数组总和的差值即为缺失数
'''
三、找1000以内,可以被5或6整除但不能被5和6一起整除
def math_5_6(x):
count=[]
for i in range(1,x+1):
if (i % 5 == 0 or i % 6 ==0 ):
if i % 5 == 0 and i % 6 ==0:
continue #利用continue跳过能被5和6整除的数
else:
count.append(i)
print(count)
math_5_6(10000)
四、根据完整的路径从路径中分离文件路径、文件名及扩展名
import os
a=r'd:\Git\index.txt'
os.path.basename(a)
os.path.dirname(a)
五、剔除字符串内空格
a = input('请输入字符串:')
b = ''
for i in a:
if i.isspace() == True:
continue
b += i
print(f'剔除空格后的字符串为:{b}')
六、生成无数字的字符串
import random
a = 'abcdefghijklmnopqrstuvwxyz'
str = random.sample(a,5)
print (str)
七、将字符串排序后逆序输出
a = input('请输入一个字符串进行排序:')
li = []
count = ''
for i in a:
b = int(ord(i))#->ascil码
li.append(b)
li.sort()
for i in li:
c = chr(i)#->abcdefghijklmnopqrstuvwxyz
count += c
print(count)
print(count[::-1])
八、跳台阶,只能跳1格活2格,跳到第n格有多少种方法
def count_1_2(n):
print(f"一共{n}格3台阶")
x=1
y=2
count=0
for i in range(n):
for j in range(n):
if n==x*i+y*j:
count+=1
print(f"方法{count}:跳1格共跳{i}次,跳2格共跳{j}次)")
count_1_2(5)
九、汉诺塔、将n层从小到大的圆盘,从位置1移动的位置3上,且小盘子不能在大盘子下。n层需要多少步。