# ====================== 配置区 ======================
total = 113.25 # 数量总和
price = 62 # 单价
max_diff = 1.5 # 数量最大相差 ≤1.5
allow_over = 3 # 仅允许 3 个金额超 1000 元
# ====================================================
import random
random.seed()
# 自动计算
max_normal_qty = 1000 / price # 不超1000元的最大数量
count = 9 # 固定9个数字
base = total / count
nums = []
used_values = set()
over_count = 0
# 生成前 8 个数字
for _ in range(count - 1):
# 随机生成,范围紧凑保证差值合规
if over_count < allow_over:
# 生成超1000元的数量
val = round(random.uniform(max_normal_qty + 0.1, max_normal_qty + 0.8), 2)
over_count += 1
else:
# 生成不超1000元的数量
val = round(random.uniform(base - 0.7, base + 0.7), 2)
# 确保不重复
while val in used_values:
val = round(val + 0.01, 2)
used_values.add(val)
nums.append(val)
# 第9个数字自动补齐总和
last_num = round(total - sum(nums), 2)
while last_num in used_values:
last_num += 0.01
last_num = round(last_num, 2)
nums.append(last_num)
# 最终校准总和
final_sum = sum(nums)
if abs(final_sum
- total
) > 0.001: nums[-1] = round(nums[-1] + total - final_sum, 2)
# 打乱顺序,彻底无规律
random.shuffle(nums)
# ===================== 输出 =====================
for num in nums:
print(f"{num:.2f}")
# 校验输出
amounts = [round(x * price, 2) for x in nums]
print("\n===== 校验结果 =====")
print(f"✅ 数量总和:{sum(nums):.2f}")
print(f"✅ 超1000元个数:{len([a for a in amounts if a > 1000])}")
print(f"✅ 最大相差:{max(nums)-min(nums):.2f} ≤ 1.5")
print(f"✅ 无重复:{len(set(nums)) == len(nums)}")
IyA9PT09PT09PT09PT09PT09PT09PT09IOmFjee9ruWMuiA9PT09PT09PT09PT09PT09PT09PT09CnRvdGFsID0gMTEzLjI1ICAgIyDmlbDph4/mgLvlkowKcHJpY2UgPSA2MiAgICAgIyDljZXku7cKbWF4X2RpZmYgPSAxLjUgICAgIyDmlbDph4/mnIDlpKfnm7jlt64g4omkMS41CmFsbG93X292ZXIgPSAzICAgICMg5LuF5YWB6K64IDMg5Liq6YeR6aKd6LaFIDEwMDAg5YWDCiMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoKaW1wb3J0IHJhbmRvbQpyYW5kb20uc2VlZCgpCgojIOiHquWKqOiuoeeulwptYXhfbm9ybWFsX3F0eSA9IDEwMDAgLyBwcmljZSAgIyDkuI3otoUxMDAw5YWD55qE5pyA5aSn5pWw6YePCmNvdW50ID0gOSAgICAgICAgICAgICAgICAgICAgICMg5Zu65a6aOeS4quaVsOWtlwpiYXNlID0gdG90YWwgLyBjb3VudApudW1zID0gW10KdXNlZF92YWx1ZXMgPSBzZXQoKQpvdmVyX2NvdW50ID0gMAoKIyDnlJ/miJDliY0gOCDkuKrmlbDlrZcKZm9yIF8gaW4gcmFuZ2UoY291bnQgLSAxKToKICAgICMg6ZqP5py655Sf5oiQ77yM6IyD5Zu057Sn5YeR5L+d6K+B5beu5YC85ZCI6KeECiAgICBpZiBvdmVyX2NvdW50IDwgYWxsb3dfb3ZlcjoKICAgICAgICAjIOeUn+aIkOi2hTEwMDDlhYPnmoTmlbDph48KICAgICAgICB2YWwgPSByb3VuZChyYW5kb20udW5pZm9ybShtYXhfbm9ybWFsX3F0eSArIDAuMSwgbWF4X25vcm1hbF9xdHkgKyAwLjgpLCAyKQogICAgICAgIG92ZXJfY291bnQgKz0gMQogICAgZWxzZToKICAgICAgICAjIOeUn+aIkOS4jei2hTEwMDDlhYPnmoTmlbDph48KICAgICAgICB2YWwgPSByb3VuZChyYW5kb20udW5pZm9ybShiYXNlIC0gMC43LCBiYXNlICsgMC43KSwgMikKCiAgICAjIOehruS/neS4jemHjeWkjQogICAgd2hpbGUgdmFsIGluIHVzZWRfdmFsdWVzOgogICAgICAgIHZhbCA9IHJvdW5kKHZhbCArIDAuMDEsIDIpCiAgICB1c2VkX3ZhbHVlcy5hZGQodmFsKQogICAgbnVtcy5hcHBlbmQodmFsKQoKIyDnrKw55Liq5pWw5a2X6Ieq5Yqo6KGl6b2Q5oC75ZKMCmxhc3RfbnVtID0gcm91bmQodG90YWwgLSBzdW0obnVtcyksIDIpCndoaWxlIGxhc3RfbnVtIGluIHVzZWRfdmFsdWVzOgogICAgbGFzdF9udW0gKz0gMC4wMQpsYXN0X251bSA9IHJvdW5kKGxhc3RfbnVtLCAyKQpudW1zLmFwcGVuZChsYXN0X251bSkKCiMg5pyA57uI5qCh5YeG5oC75ZKMCmZpbmFsX3N1bSA9IHN1bShudW1zKQppZiBhYnMoZmluYWxfc3VtIC0gdG90YWwpID4gMC4wMDE6CiAgICBudW1zWy0xXSA9IHJvdW5kKG51bXNbLTFdICsgdG90YWwgLSBmaW5hbF9zdW0sIDIpCgojIOaJk+S5semhuuW6j++8jOW9u+W6leaXoOinhOW+iwpyYW5kb20uc2h1ZmZsZShudW1zKQoKIyA9PT09PT09PT09PT09PT09PT09PT0g6L6T5Ye6ID09PT09PT09PT09PT09PT09PT09PQpmb3IgbnVtIGluIG51bXM6CiAgICBwcmludChmIntudW06LjJmfSIpCgojIOagoemqjOi+k+WHugphbW91bnRzID0gW3JvdW5kKHggKiBwcmljZSwgMikgZm9yIHggaW4gbnVtc10KcHJpbnQoIlxuPT09PT0g5qCh6aqM57uT5p6cID09PT09IikKcHJpbnQoZiLinIUg5pWw6YeP5oC75ZKM77yae3N1bShudW1zKTouMmZ9IikKcHJpbnQoZiLinIUg6LaFMTAwMOWFg+S4quaVsO+8mntsZW4oW2EgZm9yIGEgaW4gYW1vdW50cyBpZiBhID4gMTAwMF0pfSIpCnByaW50KGYi4pyFIOacgOWkp+ebuOW3ru+8mnttYXgobnVtcyktbWluKG51bXMpOi4yZn0g4omkIDEuNSIpCnByaW50KGYi4pyFIOaXoOmHjeWkje+8mntsZW4oc2V0KG51bXMpKSA9PSBsZW4obnVtcyl9Iik=