day9-oj模拟题

#两种操作让数组全为0,面向结果编程,不要真写操作!! 

# 两个不同的字符串长度相等,是否可以镜像翻转,最后输出l-r最小的  

#一个字符串有大写字母和一些字符,判断如果删掉这些符号,剩下字符串是否恰好DGUT

#深度优先

#FFFFFFF
# while any(item!= 0 for item in a):   #记住 any!!!
#两种操作让数组全为0,面向结果编程,不要真写操作!!
n = int(input())
numbers = input()
a = [int(number) for number in numbers.split()]

count = 0

# 计算每个元素除以2的次数
for num in a:
    divides = 0
    while num > 0:
        num //= 2
        divides += 1
    count += divides


count+= n * (n - 1) // 2  #如果时间太长要把下面代码换成公式!!上面同理

# # 计算将每个元素移动到第一个位置所需的交换次数!!!!!
# for i in range(n):
#     for j in range(i,0,-1):  #从i到0  -1是倒着走
#             a[j],a[j-1]=a[j-1],a[j]
#             count+=1

print(count)
#EEEEEEE
# 两个不同的字符串长度相等,是否可以镜像翻转,最后输出l-r最小的        
n=int(input())
s=input()
t=input()
arrs=[char for char in s]
arrt=[char for char in t]
result = None
min_diff = float('inf')  #初始化为无穷大

for l in range(n):
    for r in range(l+1,n+1):
        s_list = list(s)
        s_list[l:r] = s_list[l:r][::-1] #[1:r]从1-r-1的切片 [::-1]从末尾开始倒着来
        new_s = ''.join(s_list)
        
        # 比较逆转后的 s 和 t 是否相同
        if new_s == t:
             # 如果找到有效的 l 和 r,更新结果和最小差值
            diff = r - l
            if diff < min_diff:
                min_diff = diff
                result = (l + 1, r) 

if result:
    
    print(result[0], result[1])
else:
    print('NO')
#BBBBB
#一个字符串有大写字母和一些字符,判断如果删掉这些符号,剩下字符串是否恰好DGUT
n=int(input())
str=input()

arr2=[]

for char in str:  #循环字符串!!!
    if char not in ['%', '&', '*', '?', '@', '^']:
        arr2.append(char)


if arr2==['D','G','U','T']:
    print('YES')
else:
    print('NO')

v = [int(input()) for _ in range(10)]  # 读取10个数字并存放在列表v中

def dfs():
    current_sum = 0  # 当前和初始化为0
    max_depth = 10  # 最大深度为10,因为有10个数字
    path = []  # 路径初始化为空

    def explore(current_index, current_sum):
        # 如果已经检查了所有数字
        if current_index == max_depth:
            if current_sum == 20:
                print("YES")
                return True
            return False
        
        # 尝试使用个位数
        if explore(current_index + 1, current_sum + v[current_index] % 10):
            return True
        
        # 尝试使用十位数
        if explore(current_index + 1, current_sum + v[current_index] // 10):
            return True
        
        return False

    # 从第一个数字开始,当前和为0,路径为空
    if not explore(0, current_sum):
        print("NO")  # 如果遍历完所有组合都没有找到,则输出NO

dfs()

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值