如何解决打印使用随机输入的 5 个整数中的 4 个的最大和最小总和
在hackerrank中,这个问题在15个测试用例中有8个失败了,有人可以纠正这个问题并告诉我哪里出了问题。
import random
在列表中输入值
arr=[int(x) for x in input().split()]
mini=1000000000000
maxi=0
for x in range(len(arr)-1):
randomsum=sum(random.sample(arr,4))
if randomsum<mini:
mini=randomsum
if randomsum >maxi:
maxi=randomsum
print(mini,maxi)
解决方法
你的算法有问题。鉴于您对 5 个整数的隐含测试,您随机抽取 5 个样本。无法保证您会碰巧为其中两个样本选择要排除的每个最小和最大元素。
您的代码会查找您选择的样本的最小值和最大值,但这不是问题说明。您尚未说明您认为这将如何为您提供可靠的答案,因此我们无法“修复”您的代码。
这是一个具有直接、确定性解决方案的问题。您对涉及随机组件的个人要求似乎不符合解决给定问题的目标。我建议您停止尝试使用 random
,并直接解决给定的问题。
给定五个正整数,找出可以通过正好将五个整数中的四个相加来计算的最小值和最大值。然后将各自的最小值和最大值打印为一行,由两个空格分隔的长整数组成。
问题明确指出打印的值应该是列表中的 4 个 SMALLEST 和 4 个 LARGEST 整数。对于更大尺寸的数组,random.sample 仍然无法覆盖数组的所有部分。这个问题需要一个具体的解决方案,而不是随机化样本列表。 2线解决方案:
<button onClick="convert()">Run</button>
<textarea id="mycode">
<!-- Comment is not rendered -->
Hello World!
</textarea>
<iframe id="display"></iframe>
之所以随机得到一个大小为 4 的样本,是因为这个问题需要你明确地得到 4 个最小和 4 个最大的数字,并将它们的总和打印在屏幕上,因此如果你随机化样本,你不太可能得到4 个最小和 4 个最大的数字,即使您没有随机化而是遍历列表并将每 4 个长度的 subList 与最小和最大的整数进行比较,您仍然不会成功,因为列表仍然不太可能已经排序你会得到 4 个最小的和 4 个最大的数字。这就是为什么这样的事情会失败:
with requests.Session() as session:
#print("Retrieving readings from Power Gateway...")
cmd_list_metering_json_result = session.get("http://" + host + "/api_json.asp?cmd=list_metering&auth="+userPasswordBase64)
#print("Retrieved.")
cmd_list_metering_dict = cmd_list_metering_json_result.json()
#print("Number of results: ",len(cmd_list_metering_dict))
#print("cmd:list_metering:returned:",cmd_list_metering_dict)
#print(json.dumps(cmd_list_metering_dict,indent=4,sort_keys=True))
#print("All keys ",cmd_list_metering_dict.keys())
if cmd_list_metering_dict['status'] != 'success':
syslog.syslog("FAILURE to retrieve cmd_list_metering from power gateway")
exit(1)
#
## Only interested in the 'devices' key
## which is a list of dictionaries,one dictionary per device
##
#
#print("All Devices = ",cmd_list_metering_dict['devices'])
#print("Type = ",type( cmd_list_metering_dict['devices']) )
numberOfDevices = len(cmd_list_metering_dict['devices'])
#print("Number of devices = ",numberOfDevices)
if numberOfDevices != 3:
syslog.syslog("PowerTracker requires reboot - expect 3 devices")
exit(1)
devIx = 0
timeOfDayInSeconds = int(datetime.datetime.today().timestamp())
#print("timeOfDayInSeconds = ",timeOfDayInSeconds)
for devIx in range(0,numberOfDevices):
device_dict = cmd_list_metering_dict['devices'][devIx]
#print("Storing device ",device_dict['deviceid']," alias ",device_dict['alias'])
data_tuple = (
timeOfDayInSeconds,device_dict['timestamp'],device_dict['modid'],device_dict['model'],device_dict['alias'],15,device_dict['voltage'],device_dict['current'],device_dict['frequency'],device_dict['powerfactor'],device_dict['activepower'],device_dict['apparentpower'],device_dict['mainenergy'],1,device_dict['signalstrength'],device_dict['negativeenergy'],1
)
rowsInserted = dbCursor.execute("""insert into DATA (
time_index,TimeStamp,EUI64,modelident,modelname,alias,devicetype,voltage,current,frequency,powerfactory,activepower,apparentpower,mainenergy,onoffstatus,rssi,lqi,nenergy,CT_ratio
) values (
?,?,?
);""",data_tuple)
#print("Committing transaction...")
dbConn.commit()
#print("Closing cursor...")
dbCursor.close()
#if dbConn:
# print("Disconnecting from database...")
# dbConn.close()
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。