当前位置: 首页 > news >正文

四则运算+从单向链表中删除指定值的节点+名字的漂亮度+数独(Sudoku)

四则运算

含义:给定表达式字符串,输出这个表达式的结果。
例如,表达式 3 + 2 ∗ 1 + 2 ∗ [ − 4 / ( 8 − 6 ) + 7 ] 3+2*{1+2*[-4/(8-6)+7]} 3+21+2[4/(86)+7],输出结果为 25 25 25

要计算一个表达式字符串,需要两个分别存储数字和运算符的容器/数据结构,以及一个处理规则:
1、选择作为容器/数据结构,因为它有先进后出的特性;
2、由于数字有 123 123 123 − 12 -12 12 这种形式,因此在计算前提前将数字字符以一个整体存储/展示;
3、乘除的优先级大于加减,因此遇到加减运算符且前面有乘除的子表达式时,先将前面的表达式计算并将其结果作为加减表达式的左侧数字;
4、大中小括号( { } \{\} {} [ ] [] [] ( ) () ()),当遇到括号的右半边就执行括号里面的表达式,直到遇到括号的左半边。
在这里插入图片描述

def standards(ss):# 处理 -123 和 123 这种数字的情况res, num = [], ''for i, c in enumerate(ss):if c.isdigit():num += celse:if num:res.append(num)num = ''if c == '-': # 可能是负数if i == 0 or ss[i-1] in '({[+-*/':num += ccontinue  # 再到上面添加到 resres.append(c)if num:res.append(num)return resdef cal(ss):lst = standards(ss)stackOp, stackN = [], []for i in lst:if i not in '+-/*(){}[]': # 数字stackN.append(i)  elif i in '*/([{':stackOp.append(i)elif i in '+-':# */ 的优先级大于 +-,需要提前运算if len(stackOp) == 0 or stackOp[-1] in '([{':stackOp.append(i)else:while stackOp:if stackOp[-1] in '({[':breakop = stackOp.pop()n2, n1 = stackN.pop(), stackN.pop()stackN.append(str(eval(n1 + op + n2)))stackOp.append(i)elif i in ']})':while stackOp[-1] not in '({[':op = stackOp.pop()n2, n1 = stackN.pop(), stackN.pop()stackN.append(str(int(eval(n1 + op + n2))))stackOp.pop()while stackOp:op = stackOp.pop()n2, n1 = stackN.pop(), stackN.pop()stackN.append(str(int(eval(n1 + op + n2))))print(stackN.pop())expr = input()
cal(expr)

从单向链表中删除指定值的节点

class Node:def __init__(self, val=None, next=None) -> None:self.val = valself.next = nextdef construct(head, n, binaryList, deleteVal):for i in range(n-1):insertVal, insertedVal = binaryList[2 * i: 2 * i + 2]head = insert(head, insertedVal, insertVal)head = remove(head, deleteVal)printNodeList(head)return headdef insert(head, val1, val2):cur = headnode = Node(val2)while cur:if cur.val == val1:node.next = cur.nextcur.next = nodebreakcur = cur.nextreturn headdef remove(head, delVal):# 删除特定的值cur, pre = head, Nonewhile cur:if cur.val == delVal:if not pre:head = cur.nextelse:pre.next = cur.nextbreakelse:pre = curcur = cur.nextreturn headdef printNodeList(head):cur, res = head, ""while cur:res += str(cur.val) + " "cur = cur.nextprint(res)# n h (a, b)_{n-1} k
line = list(map(int, input().split(" ")))
n, h, k, binaryList = line[0], line[1], line[-1], line[2:-1]
head = construct(Node(val=h), n, binaryList, k)

名字的漂亮度

from collections import Counterdef fn(s):ss, scores = 26, 0counts = Counter(s)for _, cnt in counts.most_common(): # val, cntscores += ss * cntss -= 1print(scores)# 字符串中,字符最多的分数最高,依次往下,字母的分数不同
n = int(input())
for _ in range(n):fn(input())

数独(Sudoku)

def check(board, x, y):# 检查填入的值是否与同一的行和列的值有重复,不要重复检查for i in range(9):if i != x and board[i][y] == board[x][y]:return False  # 检查同一行for j in range(9):if j != y and board[x][j] == board[x][y]:return False  # 检查同一列# 检查小的方框内,所填的数字有没有重复m, n = 3 * (x // 3), 3 * (y // 3)for i in range(3):for j in range(3):if (i + m != x or j + n != y) and board[i + m][j + n] == board[x][y]:return Falsereturn True def dfs(board):for i in range(9):for j in range(9):if board[i][j] == 0:for k in '123456789': # 尝试填这几个数字board[i][j] = int(k)if check(board, i, j) and dfs(board):return Trueboard[i][j] = 0  # 不可行,当前选择的数字不合理return False  # 不可行,上次选择的数字不合理return Trueboard = []
while True:try:board.append(list(map(int, input().split(' '))))except:break
dfs(board)
for i in board:print(' '.join(list(map(str, i))))
http://www.xdnf.cn/news/209179.html

相关文章:

  • Dali 1.1.4 | 使用尖端技术将描述转换成独特艺术品、照片和图像,发挥无限创意
  • npm如何安装pnpm
  • Flip PDF Plus Corp7.7.22电子书制作软件
  • AimRT 从零到一:官方示例精讲 —— 一、工具链与基本概念
  • css3伸缩盒模型第一章(主轴以及伸缩盒模型)
  • P1903 [国家集训队] 数颜色 / 维护队列 Solution
  • neo4j暴露公网ip接口——给大模型联通知识图谱
  • Python 使用一等函数实现设计模式(案例分析:重构“策略”模式)
  • Linux 服务管理两种方式service和systemctl
  • Node.js 事件循环和线程池任务完整指南​
  • 香港科技大学广州|可持续能源与环境学域博士招生宣讲会—四川大学专场
  • 阿里云服务迁移实战: 05-OSS迁移
  • 【Linux系统】systemV共享内存
  • 基于tabula对pdf中多个excel进行识别并转换成word中的优化(五)
  • Go语言之路————接口、泛型
  • SpringMVC再复习1
  • MODSIM选型指南:汽车与航空航天企业如何选择仿真平台
  • 极客天成参与”AI助力智慧城市构建”主题演讲暨招商引智专题推介活动
  • 哈希表笔记(一 )
  • 【东枫电子】AI-RAN:利用人工智能驱动的计算基础设施变革 RAN
  • 后端部署:Flask + pymysql + MySQL迁移到服务器(以Linux为例)
  • Android Framework常见问题
  • 包装类的缓存机制
  • SELinux 从理论到实践:深入解析与实战指南
  • 算法题(137):丢手绢
  • 在yolo中Ultralytics是什么意思呢?超越分析的智能
  • 篮球足球体育球员综合资讯网站模板
  • git学习之git常用命令
  • MySQL 在 CentOS 7 环境下的安装教程
  • Go 语言中的 `recover()` 函数详解