定义一个以三个数字为参数并返回两个较大数字的平方和的函数。
例如,给定6,7,8,我定义的函数应返回113
当我给出代码时,它可以解决大多数问题,但是显然有一些我没有尝试过的可能性吗?我认为我的代码有缺陷,但不确定是否还有其他可能性。非常感谢您的帮助,非常感谢!
def bigger_sum(a,b,c):
if(a+b>b+c):
return(a*a+b*b)
if(a+c>b+c):
return(a*a+c*c)
if(b+c>a+c):
return(b*b+c*c)
答案 0 :(得分:2)
您可以使用min
来解决此问题:
def big2_sqrsum(a,b,c):
x = min(a,b,c)
return (a*a + b*b + c*c) - (x*x)
print(big2_sqrsum(6,7,8))
输出:
113
使用if-else的替代解决方案
def big2_sqrsum2(a,b,c):
if a < b and a <c:
return b*b + c*c
elif b < a and b < c:
return a*a + c*c
elif c < a and c < b:
return a*a + b*b
答案 1 :(得分:1)
只需检查最小的数字。众所周知,将值分配给两个新变量,这些变量将拥有最大和第二个最大值并求和它们的平方。
类似这样的东西:
out = []
i=0
for x in b:
i = np.argmax( a[i:] >= x ) + i
out.append( i )
只允许您一个位置来计算公式:
big1 = 0
big2 = 0
if ([a is smallest]):
big1 = b
big2 = c
elif ([b is smallest]):
big1 = a
big2 = c
elif ([c is smallest]):
big1 = a
big2 = b
答案 2 :(得分:1)
让我们看看为什么您的代码存在缺陷。给定类似SELECT TOP 1
'Column One',
'Column Two',
1 AS SortOrder
FROM [dbo].[myTable]
WHERE [Col1] = @myValue
AND @@RowCount > 0
UNION ALL
SELECT cast([Col1] AS varchar),
cast([Col2] AS varchar),
2 AS SortOrder
FROM [dbo].[myTable]
WHERE [Col1] = @myValue
AND @@RowCount > 0
ORDER BY SortOrder
的比较,则if a + b > b + c:
和a
都大于b
的暗示是错误的。 c
可以是最小的数字。您只知道b
,因为您可以从不等式的两边减去a > c
。
您需要查找并丢弃最小的数字。最简单的方法是按照@Sociopath's answer的建议,用b
计算最小值并将其减去。
如果要保留min
结构,则必须分别比较数字:
if-else
答案 3 :(得分:1)
您可以使用min()轻松定义函数
def two_bigger_sum(num1,num2,num3):
min_num = min(num1,num2,num3) # it returns minimum number
return ((num1**2 + num2**2 + num3**2)-(min_num**2)) # num**2 = square of num
print(two_bigger_sum(6,7,8))
答案 4 :(得分:1)
Sociopath的答案有效,但效率低下,因为它需要两个额外的浮点乘法。如果您要对大量物品执行此操作,则将花费两倍的时间!相反,您可以直接找到两个最大的数字。基本上,我们对列表进行排序并取两个最大的列表,可以直接如下:
def sumsquare(a,b,c):
# Strategy: swap, and make sure c is the smallest by the end
if c > b:
b, c = c, b
if c > a:
a, c = c, a
return a**2 + b**2
# Test:
print(sumsquare(3,1,2))
print(sumsquare(3,2,1))
print(sumsquare(1,2,3))
print(sumsquare(1,3,2))
print(sumsquare(2,1,3))
print(sumsquare(2,3,2))
答案 5 :(得分:1)
我尝试将列表理解和列表切片与排序方法一起使用。
F1 F2 F3 F4 F6
9 9 8 8 8
OP:-
def b2(l):
return sum([x**2 for x in sorted(l)[1:]])
print(b2([1,2,3]))