1、 利用嵌套循环打印九九乘法表(输出沿对角线以下内容) 2、 手里11个球,其中有一个重量不一样的(不知道是轻还是重),有一天平,请问至少几次可以将其称出,请简述思路,并使用程序实现。 3、
时间: 2024-03-08 08:51:22 浏览: 101
好的,我来回答你的问题。
1. 打印九九乘法表的代码如下:
```
for i in range(1, 10):
for j in range(1, i+1):
print('{}*{}={}'.format(j, i, i*j), end='\t')
print()
```
2. 这是一个经典的称重问题,可以通过二分法来解决。具体思路如下:
首先将11个球均分为三组,每组各有3个球,剩下2个球。将两个球放在一边,另外三组分别放在天平的左右两边,比较两边的重量,如果两边重量相等,说明剩下的两个球中重量不同的那个球在未参加比较的那组中,可以通过类似二分查找的方式,将剩下的8个球分为三组,每组各有2个球,再进行比较,以此类推,最终可以找到不同重量的那个球。
具体实现的代码如下:
```
import random
balls = [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, random.randint(1, 10)]
def weigh(left, right):
"""
比较左右两边的重量,返回-1、0或1
"""
left_weight = sum([balls[i] for i in left])
right_weight = sum([balls[i] for i in right])
if left_weight < right_weight:
return -1
elif left_weight == right_weight:
return 0
else:
return 1
def find_different_ball(balls):
"""
找到不同重量的那个球
"""
left, mid, right = [0, 1, 2], [3, 4, 5], [6, 7, 8]
result = weigh(left, right)
if result == 0:
result = weigh([9], [10])
if result == -1:
return 9
else:
return 10
elif result == -1:
result = weigh(left, mid)
if result == 0:
return 2
elif result == -1:
return find_different_ball(left)
else:
return find_different_ball(mid)
else:
result = weigh(mid, right)
if result == 0:
return 0
elif result == -1:
return find_different_ball(right)
else:
return find_different_ball(mid)
print(find_different_ball(balls))
```
这个算法最多需要称重3次就可以找到不同重量的那个球。
阅读全文