矿大python学习通实验7

我怎么也想不到会上力扣的题目...虽说是简单题,但是我还是salute了。

"""
实验7-1:编写程序,用户输入一行字符串,其中可能包括英文小括号 (),请检查小括号是否配对正确,仅限小括号。
【运行示例1】
(7-5)+3-2
配对成功
【运行示例2】
(a+b))
配对不成功
"""

# 利用列表和栈的思想来处理

def match_kuohao(s):
    ls = []
    kuohao = "()"
    for i in range(len(s)):
        si = s[i]
        if kuohao.find(si) == -1:
            continue
        if si == '(':
            ls.append(si)
            continue
        if len(ls) == 0:
            return False
        p = ls.pop()
        if p == '(' and si == ')':
            continue
        else:
            return False
    if len(ls) > 0:
        return False
    return True
n = input()
if match_kuohao(n):
    print("配对成功")
else:
    print("配对不成功")

# 利用字典去处理括号对应的问题

def match_brackets(s):
    # 使用字典来映射括号
    bracket_map = {')': '('}
    stack = []
    for char in s:
        # 如果是右括号,检查栈顶是否有对应的左括号
        if char in bracket_map:
            if stack and stack[-1] == bracket_map[char]:
                stack.pop()  # 弹出匹配的左括号
            else:
                # 如果栈为空或栈顶不是对应的左括号,返回False
                return False
        else:
            # 如果是左括号,压入栈中
            stack.append(char)
    # 如果栈为空,则所有括号都正确配对
    return not stack
n = input()
if match_brackets(n):
    print("配对成功")
else:
    print("配对不成功")

# 好朋友的奇思妙想

def check_kuohao(input_str):
    count = 0
    for char in range(len(input_str)):
        if input_str[char] == "(":
            count += 1
        elif input_str[char] == ")":
            count -= 1
            if count < 0:
                return "配对不成功"
    if count == 0:
        return "配对成功"
    else:
        return "配对不成功"
inputStr = input()
print(check_kuohao(inputStr))

"""
实验7-2:快乐的数字按照如下方式确定:从一个正整数开始,用其每位数的平方之和取代该数,
并重复这个过程,直到最后数字要么收敛等于1且一直等于1,
要么将无休止地循环下去且最终不会收敛等于1。能够最终收敛等于1的数就是快乐的数字。
编写程序,输入一个数字,判断输出这个数字是否“快乐”。
例如,数字 19 就是一个快乐的数字,计算过程如下:
  12 + 92 = 82
  82 + 22 = 68
  62 + 82 = 100
  12 + 02 + 02 = 1   (最终收敛为1)
【运行示例1】
19
19是快乐数字
【运行示例2】
22
22不是快乐数字
这里题目解释的有问题。。。所有该有的符号都没有(老师全责)
实际上的过程是:
数字 19 就是一个快乐的数字,计算过程如下:
  1^2 + 9^2 = 82
  8^2 + 2^2 = 68
  6^2 + 8^2 = 100
  1^2 + 0^2 + 0^2 = 1   (最终收敛为1)
"""
def getHappyNum(num):
    numStr = str(num)
    sum_of = 0
    for i in numStr:
        sum_of += int(i)**2
    return sum_of
n = eval(input())
a = n
while n != 1 and n != 4:
    n = getHappyNum(n)
else:
    if n == 1:
        print("{}是快乐数字".format(a))
    else:
        print("{}不是快乐数字".format(a))

"""
实验7-3:编写程序,输入三个自然数m、n和k,解决以下问题:m个人在一条船上,超载,需要n人下船。
于是人们排成一队,排队的位置即为他们的编号。报数,从 1 开始,数到 k 的人下船。
如此循环,直到船上仅剩 m - n人为止,问都有哪些编号的人下船了呢?
【运行示例】
30
15
9
9号下船了
18号下船了
27号下船了
6号下船了
16号下船了
26号下船了
7号下船了
19号下船了
30号下船了
11号下船了
23号下船了
5号下船了
21号下船了
4号下船了
22号下船了
"""
def yueSeFu(m,n,k):
    serial_num = list(range(1,m +1))    # 创建从1到m的序号
    index = 0
    if k==1:
        for i in range(1,n+1):
            serial_num.remove(i)
            print('{0}号下船了'.format(i))
    else:
        while len(serial_num) > m - n:
            for i in serial_num:            # 遍历每个编号
                index += 1                     
                if index == k:                # 当外部变量index找到k时,进行下面代码块的操作
                    serial_num.remove(i)    # 移除需要下船的人的编号
                    index = 1                # 这时候index已经找到序号k了,就要重新遍历
                    print('{0}号下船了'.format(i))
                    if len(serial_num) == m - n:
                        break
m1 = eval(input())
n1 = eval(input())
k1 = eval(input())
yueSeFu(m1,n1,k1)
"""
实验7-4:编写程序,输入一个整数数组nums和一个目标值target,
请在该数组中找出和为目标值的那两个整数,并返回他们的数组下标。假定最多只能找到一种和为目标值的可能性。
【运行示例1】
2,7,11,5
9
和为目标值的两个整数的下标是 (0, 1)
【运行示例2】
2,7,11,5
8
和为目标值的两个整数的下标是 未找到
两数之和!感受leetcode第一题的风采吧!!!
"""

def twoSum(nums, target):
    length = len(nums)  # 获取列表的长度
    for index1 in range(length - 1):  # 减1是因为后面的循环会考虑到index1+1
        for index2 in range(index1 + 1, length):  # 从index1的下一个元素开始
            if nums[index1] + nums[index2] == target and nums[index1] != nums[index2]:
                return index1, index2
    return
a = list(map(int, input().split(',')))
b = int(input())
result = twoSum(a, b)
if result:
    print("和为目标值的两个整数的下标是 ({}, {})".format(result[0],result[1]))
else:
    print("和为目标值的两个整数的下标是 未找到")

"""
实验7-5:编写程序,输入一个自然数n,输出n阶的蛇形矩阵,
蛇形矩阵是由1开始的自然数依次排列成的一个矩阵上三角形。
【运行示例】
5
1 3 6 10 15
2 5 9 14
4 8 13
7 12
11
"""

def generate_list(n):
    n_list = [1]
    for i in range(2, n+1):
        n_list.append(n_list[-1] + i)
    return n_list
def generate_matrix(s):
    s_matrix = []
    s_matrix.append(s)
    while len(s_matrix[-1][1::]) > 0:
        m = []
        for i in s_matrix[-1][1::]:
            m.append(i-1)
        s_matrix.append(m)
    return s_matrix
g = generate_list(int(input()))
for s in generate_matrix(g):
    for o in s:
        print(o,end=" ")
    if len(s)>1:
        print()

"""
实验7-6:现有n种砝码,重量互不相等,分别为 m1,m2,m3…mn;每种砝码对应的数量为 x1,x2,x3…xn 。
现在要用这些砝码去称物体的重量(放在同一侧),问能称出多少种不同的重量。
输入描述:
对于每组测试数据:
第一行:n —— 砝码的种数(范围[1,10])
第二行:m1 m2 m3 … mn —— 每种砝码的重量(范围[1,2000]),空格间隔
第三行:x1 x2 x3 … xn —— 每种砝码对应的数量(范围[1,10]),空格间隔
输出描述:
利用给定的砝码可以称出的不同的重量数
例如,三种砝码,分别重1、2、5,重1的有1个,
重2的有1个,重5的有1个,共能称出8种不同的重量0、1、2、3、5、6、7、8。
【运行示例】
3
1 2 5
1 1 1
8
"""

# 砝码种类
kind = int(input())
# 砝码重量
weight = input().split(' ')
# 砝码数量
number = [int(a) for a in (input()).strip().split(' ')]
list_kind = []
set_weight = {0, }
for a in range(kind):
    for i in range(number[a]):
        list_kind.append(weight[a])
for q in list_kind:
    for ww in list(set_weight):
        set_weight.add(int(q) + ww)
print(len(set_weight))

  • 20
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值