数字三角形 购物单

news2024/11/26 5:59:11

题目:

题目描述

上图给出了一个数字三角形。从三角形的顶部到底部有很多条不同的路径。对于每条路径,把路径上面的数加起来可以得到一个和,你的任务就是找到最大的和。

路径上的每一步只能从一个数走到下一层和它最近的左边的那个数或者右 边的那个数。此外,向左下走的次数与向右下走的次数相差不能超过 1。

输入描述

输入的第一行包含一个整数N (1≤N≤100),表示三角形的行数。

下面的N 行给出数字三角形。数字三角形上的数都是 0 至 100 之间的整数。

输出描述

输出一个整数,表示答案。

思路:

对输入使用二维矩阵进行存储,对不使用的地方放置-1. 

从顶点出发,先判断向左走和向右走的次数,如相差不超过1,则选择下一行离它最近的两个数中的最大的数,如相差次数超过1,则只能选择下一行最左边或右边的数.

但这样找到的路径不是全局最大的路径!

后面看了别人的代码,发现思路都不一样。去遍历每一行,将上一行的元素加到该行中。由于左右深度不能相差>1,则路径最后都会走到最后一行最中间的位置(如为偶数行,即最后一行最中间有两个,则选择最大的那个数)

代码1:

import os
import sys

# 请在此输入您的代码
row = int(input())
data = [[-1 for i in range(row)]for j in range(row)]
for i in range(row):
  a = input().split(' ')
  for j in range(len(a)):
    data[i][j] = a[j]

sum = int(data[0][0])
left = right = 0
rol = 0
for deep in range(row-1):
  if abs(left-right) <= 1:
    if data[deep+1][rol] > data[deep+1][rol+1]:
      left = left + 1
      sum = sum + int(data[deep+1][rol])
      rol = rol
      continue
    else:
      right = right + 1
      sum = sum + int(data[deep+1][rol+1])
      rol = rol + 1
      continue
  else:
    if left > right:
      right = right + 1
      sum = sum + int(data[deep+1][rol+1])
      rol = rol + 1
      continue
    else:
      left = left + 1
      sum = sum + int(data[deep+1][rol])
      rol = rol
      continue

print(sum)

代码2:

import os
import sys


# 请在此输入您的代码
row = int(input())
data = [[-1 for i in range(row)]for j in range(row)]
for i in range(row):
  a = input().split() # .split()默认以空格为分隔符 不存在.split(' ')的写法
  for j in range(len(a)):
    data[i][j] = int(a[j])
#这里的输入处理 可以等价于一句:data = [list(map(int,input.split())) for i in range(row)]
for i in range(1, row):
  for j in range(0, i + 1):
    if j == 0:
      data[i][j] += data[i - 1][j]
    elif j == i:
      data[i][j] += data[i - 1][j - 1]
    else:
      data[i][j] += max(data[i - 1][j - 1], data[i - 1 ][j])
if row % 2 == 0:
  print(max(data[row - 1][row // 2 - 1], data[row-1][row//2]))
else:
  print(data[row - 1][row // 2])

题目:

现在小明很心烦,请你帮他计算一下,需要从取款机上取多少现金,才能搞定这次购物。

取款机只能提供 100100 元面额的纸币。小明想尽可能少取些现金,够用就行了。 你的任务是计算出,小明最少需要取多少现金。

以下是让人头疼的购物单,为了保护隐私,物品名称被隐藏了。

主要思路:

首先对输入的处理,我直接复制过来作为一个字符串,方便后续对其进行基于规则的分割,来得到我们想要的数据。将每个物品原价*打折价,计算其和。因为是个填空题,我直接输出的总价格,并没有对其进行取整后输出,知道价格后,人脑计算需要的整数钱,然后直接printf()。后面去看了别人的代码,发现math.ceil()函数,即进行向上取整,则只需对总价/100(因为只能取面额为100的纸币)后取整的数再*100,就是要取的面额100的现金! 

代码:

import os
import sys
import math
# 请在此输入您的代码
shapping = '****     180.90       88折 ****      10.25       65折 ****      56.14        9折 ****     104.65        9折****     100.30       88折****     297.15        半价****      26.75       65折****     130.62        半价****     240.28       58折****     270.62        8折****     115.87       88折****     247.34       95折****      73.21        9折****     101.00        半价****      79.54        半价****     278.44        7折****     199.26        半价****      12.97        9折****     166.30       78折****     125.50       58折****      84.98        9折****     113.35       68折****     166.57        半价****      42.56        9折****      81.90       95折****     131.78        8折****     255.89       78折****     109.17        9折****     146.69       68折****     139.33       65折****     141.16       78折****     154.74        8折****      59.42        8折****      85.44       68折****     293.70       88折****     261.79       65折****      11.30       88折****     268.27       58折****     128.29       88折****     251.03        8折****     208.39       75折****     128.88       75折****      62.06        9折****     225.87       75折****      12.89       75折****      34.28       75折****      62.16       58折 ****     129.12        半价 ****     218.37        半价  ****     289.69        8折'
data_2 = []
data_1 = shapping.split('****') #以****为分隔符
for i in data_1:
  data_2.append(i.replace('折', '').replace('半价', '5').split())  # 将 折 和 半 替换成空格和数字

sum = 0
for i in data_2[1:]:  # 这里从下标为1开始遍历,因为下标为0是个空列表,上面用的append 第一个空列表没有进行覆盖
  if len(i[1]) == 1:
    i[1] += '0'
    sum += (float(i[0])*int(i[1]))/100
  else:
    sum += (float(i[0])*int(i[1]))/100

print(math.ceil(sum/100)*10)  # math.ceil向上取整函数,如math.ceil(44.2) = 45

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/393554.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

从0开始自制解释器——实现简单的加法计算器

为什么要学习编译器和解释器呢&#xff1f;文中的作者给出的答案有下面几个&#xff1a; 为了深入理解计算机是如何工作的&#xff1a;一个显而易见的道理就是&#xff0c;如果你不懂编译器和解释器是如何工作的那么你就不明白计算机是如何工作的编译器和解释器用到的一些原理…

InnoDB——详细说明索引中B+树的操作和原理

本内容针对Mysql5.x&#xff1b; 索引是应用程序设计和开发的一个重要方面。 若索引太多&#xff0c;应用程序的性能可能会收到影响。 而索引太少&#xff0c;对查询性能又会产生影响。 索引的注意事项&#xff1a; 如果知道数据的使用&#xff0c;从一开始就应该在需要处添加…

车企数据分类分级的实践指南出炉!“数据安全推进计划”发布,奇点云参编

日前&#xff0c;“数据安全推进计划”&#xff08;DSI&#xff09;正式发布《智能网联汽车数据分类分级实践指南》&#xff08;下文简称“指南”&#xff09;&#xff0c;旨在以合规为主要导向&#xff0c;明确智能网联汽车数据分类分级的方法论&#xff0c;为数据全生命周期的…

每日学术速递3.7

CV - 计算机视觉 | ML - 机器学习 | RL - 强化学习 | NLP 自然语言处理 Subjects: cs.CV 1.Dropout Reduces Underfitting 标题&#xff1a;Dropout 减少欠拟合 作者&#xff1a;Zhuang Liu, Zhiqiu Xu, Joseph Jin, Zhiqiang Shen, Trevor Darrel 文章链接&#xff1a;h…

SpringBoot(Tedu)—DAY01——环境搭建

SpringBoot(Tedu)—DAY01——环境搭建 目录SpringBoot(Tedu)—DAY01——环境搭建零、今日目标一、IDEA2021项目环境搭建1.1 通过 ctrl鼠标滚轮 实现字体大小缩放1.2 自动提示设置 去除大小写匹配1.3 设置参数方法自动提示1.4 设定字符集 要求都使用UTF-8编码1.5 设置自动编译二…

controller-runtime搭建operator开发环境

目录 基本结构 注入CRD 基本结构 首先下载相应的go pkg go get -u sigs.k8s.io/controller-runtime 接下来需要创建控制器和Manager Operator的本质是一个可重入的队列编程模式&#xff0c;而Manager可以用来管理Controller、Admission Webhook&#xff0c;包括访问资源对…

MATLAB算法实战应用案例精讲-【优化算法】樽海鞘群算法(SSA)及其算法变种(附matlab代码实现)

目录 前言 算法原理 算法思想 数学模型 &#xff08;1&#xff09;种群初始化 &#xff08;2&#xff09;领导者位置更新 &#xff08;3&#xff09;跟随者位置更新 代码实现 算法流程图 算法步骤 伪代码 SSA伪代码 MSSA伪代码 面向全局搜索的自适应领导者樽海鞘群算…

同模块设置不同应用主题方案

有时候公司内部会有不同应用但是有部分模块功能一样&#xff0c;只根据应用角色有些细节逻辑区分的场景。这时候往往采用模块化采用以应用至不同的APP。如果APP主题不一致&#xff0c;该如果解决。 方案&#xff1a; 在不同应用的config.gradle 下面根据不同应用定义不同的a…

基于SSM+SpringBoot《CRM客户关系管理系统》实战开发教程(附文档及源码)

1.项目简介 客户关系管理&#xff08;Customer Relationship Management&#xff0c;简称CRM&#xff09;&#xff0c;是指企业为提高核心竞争力&#xff0c;利用相应的信息技术以及互联网技术协调企业与顾客间在销售、营销和服务上的交互&#xff0c;从而提升其管理方式&…

AUTOSAR知识点Com(一):CANIf入门知识

目录 1、概述 2、上下层关系 2.1 上层 2.2 下层 3、链接 4、记录项 1、概述 下面主要是规范方面的描述&#xff1a; 参考文档《AUTOSAR_SWS_CANInterface.pdf》 CAN接口模块&#xff08;下文简“CanIf”&#xff09;位于底层CAN驱动&#xff08;CanDrv&#xff09;、CA…

华为机试题:HJ103 Redraiment的走法(python)

文章目录&#xff08;1&#xff09;题目描述&#xff08;2&#xff09;Python3实现&#xff08;3&#xff09;知识点详解1、input()&#xff1a;获取控制台&#xff08;任意形式&#xff09;的输入。输出均为字符串类型。1.1、input() 与 list(input()) 的区别、及其相互转换方…

【Python笔记20230307】

基础 编码、解码 str.encode(utf-8) # 编码 str.decode(utf-8) # 解码关键字 import keyword keyword.kwlist格式化输出 % 占位符:%s 字符串%d 整数%f 浮点数Hello, %s % world Hi, %s, you have $%d. % (Michael, 1000000) 占位符的修饰符 -左对齐 .小数点后位数 0左边补零…

SpringCloud简介

一、注册中心 1、为什么需要用到注册中心&#xff1f; 让消费者服务及时知道提供者服务的状态。例如&#xff1a;是否宕机、是否增加了集群实例等。 2、dubbo和zookeeper 特点&#xff1a;服务消费端订阅注册中心。服务提供端增加实例会把新实例注册到注册中心&#xff0c;…

HCIP知识点(前三天)

复习HCIA&#xff1a; 一、TCP/IP模型&#xff0c;OSI模型 OSI 开放式系统互联参考模型 应用层 抽象语言—>编码 表示层 编码—>二进制 会话层 应用程序内部的区分地址&#xff08;无标准格式&#xff09; 传输层 TCP/UDP – 分段&#xff08;受MTU限制&#xff09;、端…

C 语言网络编程 — PF_NETLINK sockets

目录 文章目录目录PF_NETLINK socketsPF_NETLINK sockets Linux 提供了 4 种 User Process 和 Kernel 之间进行通信的 IPC&#xff08;Inter-Process Communicate&#xff0c;进程间通信&#xff09;方式&#xff1a; /procioctlsysfsPF_NETLINK sockets&#xff08;Netlink …

vue大型商城系统中遇到的问题(上)

一&#xff1a;创建仓库1.领导创建git仓库&#xff08;参考————这篇文章&#xff09;&#xff0c;新手下载git2.打开cmd终端&#xff0c;将git仓库拉到本地3.进入文件目录&#xff0c;查看分支&#xff08;新手向——为什么需要创建分支&#xff0c;查看---&#xff09;4.创…

HCIP笔记

第一天 ARP协议 正向ARP&#xff1a;通过IP地址获取目的MAC地址 过程&#xff1a; 目的IP到目的MAC再到ARP表中&#xff0c;所需时间是180s 反向ARP&#xff1a;通过目标MAC地址获取目标IP地址 免费ARP&#xff1a;利用正向ARP的原理请求自己的IP地址 1.自我检测 2.检测地址冲…

使用JMeter 录制脚本

使用JMeter 录制脚本&#xff0c;参考的一个博主的&#xff0c;我记录到我这里&#xff0c;留着以后用哈哈哈哈 1&#xff0c;添加 HTTP代理服务器 测试计划右键–》添加–》非测试元件–》http代理服务器 2&#xff0c;添加线程组&#xff0c;用来存放录制脚本的&#xff0c…

C语言设计模式:实现简单工厂模式和工程创建

目录 一&#xff0c;设计模式概念引入 ① 什么是设计模式 ② 什么是类和对象 ③ 什么是工厂模式 二&#xff0c;C语言工厂模式的实现 ① 普通类和对象的代码实现 ② 工厂模式代码实现 ● cat.c ● dog.c ● person.c ● animal.h ● mainpro.c ● 完善mainpro.c …

硕士毕业论文常见的排版小技巧

word排版陆续更新吧&#xff0c;更具我所遇到的一些小问题&#xff0c;总结上来 文章目录1.避免题注&#xff08;图或者表的标题&#xff09;与图或表格分不用页注意点&#xff1a;光标移动到表的题注后面2.设置论文的页眉关键点&#xff1a;需要将每一章节末尾&#xff0c;都要…