# ====================== 配置区 ======================
total = 154 # 数量总和
price = 62.5 # 单价
max_diff = 2 # 强制 ≤2
allow_over = 3 # 仅允许 3 个金额超 1000 元
# ====================================================
import random
random.seed()
max_normal_qty = 1000 / price
count = 10
base = total / count
nums = []
used_values = set()
over_count = 0
# ================== 你的原版代码 完全不动 ==================
for _ in range(count - 1):
if over_count < allow_over:
val = round(random.uniform(max_normal_qty + 0.1, max_normal_qty + 0.8), 2)
over_count += 1
else:
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)
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)
# ================== 我只加这一段:强制差值 ≤2 ==================
# 自动修正所有数字,确保最大差值不超过2
current_min = min(nums)
current_max = max(nums)
while current_max - current_min > 2:
nums = [round(base + (x - base) * 0.9, 2) for x in nums]
nums[-1] = round(total - sum(nums[:-1]), 2)
current_min = min(nums)
current_max = max(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} ≤ 2")
print(f"无重复:{len(set(nums)) == len(nums)}")
IyA9PT09PT09PT09PT09PT09PT09PT09IOmFjee9ruWMuiA9PT09PT09PT09PT09PT09PT09PT09CnRvdGFsID0gIDE1NCAgICMg5pWw6YeP5oC75ZKMCnByaWNlID0gNjIuNSAgICAgICMg5Y2V5Lu3Cm1heF9kaWZmID0gMiAgICAjIOW8uuWItiDiiaQyCmFsbG93X292ZXIgPSAzICAgICMg5LuF5YWB6K64IDMg5Liq6YeR6aKd6LaFIDEwMDAg5YWDCiMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoKaW1wb3J0IHJhbmRvbQpyYW5kb20uc2VlZCgpCgptYXhfbm9ybWFsX3F0eSA9IDEwMDAgLyBwcmljZQpjb3VudCA9IDEwCmJhc2UgPSB0b3RhbCAvIGNvdW50Cm51bXMgPSBbXQp1c2VkX3ZhbHVlcyA9IHNldCgpCm92ZXJfY291bnQgPSAwCgojID09PT09PT09PT09PT09PT09PSDkvaDnmoTljp/niYjku6PnoIEg5a6M5YWo5LiN5YqoID09PT09PT09PT09PT09PT09PQpmb3IgXyBpbiByYW5nZShjb3VudCAtIDEpOgogICAgaWYgb3Zlcl9jb3VudCA8IGFsbG93X292ZXI6CiAgICAgICAgdmFsID0gcm91bmQocmFuZG9tLnVuaWZvcm0obWF4X25vcm1hbF9xdHkgKyAwLjEsIG1heF9ub3JtYWxfcXR5ICsgMC44KSwgMikKICAgICAgICBvdmVyX2NvdW50ICs9IDEKICAgIGVsc2U6CiAgICAgICAgdmFsID0gcm91bmQocmFuZG9tLnVuaWZvcm0oYmFzZSAtIDAuNywgYmFzZSArIDAuNyksIDIpCgogICAgd2hpbGUgdmFsIGluIHVzZWRfdmFsdWVzOgogICAgICAgIHZhbCA9IHJvdW5kKHZhbCArIDAuMDEsIDIpCiAgICB1c2VkX3ZhbHVlcy5hZGQodmFsKQogICAgbnVtcy5hcHBlbmQodmFsKQoKbGFzdF9udW0gPSByb3VuZCh0b3RhbCAtIHN1bShudW1zKSwgMikKd2hpbGUgbGFzdF9udW0gaW4gdXNlZF92YWx1ZXM6CiAgICBsYXN0X251bSArPSAwLjAxCmxhc3RfbnVtID0gcm91bmQobGFzdF9udW0sIDIpCm51bXMuYXBwZW5kKGxhc3RfbnVtKQoKZmluYWxfc3VtID0gc3VtKG51bXMpCmlmIGFicyhmaW5hbF9zdW0gLSB0b3RhbCkgPiAwLjAwMToKICAgIG51bXNbLTFdID0gcm91bmQobnVtc1stMV0gKyB0b3RhbCAtIGZpbmFsX3N1bSwgMikKCnJhbmRvbS5zaHVmZmxlKG51bXMpCgojID09PT09PT09PT09PT09PT09PSDmiJHlj6rliqDov5nkuIDmrrXvvJrlvLrliLblt67lgLwg4omkMiA9PT09PT09PT09PT09PT09PT0KIyDoh6rliqjkv67mraPmiYDmnInmlbDlrZfvvIznoa7kv53mnIDlpKflt67lgLzkuI3otoXov4cyCmN1cnJlbnRfbWluID0gbWluKG51bXMpCmN1cnJlbnRfbWF4ID0gbWF4KG51bXMpCndoaWxlIGN1cnJlbnRfbWF4IC0gY3VycmVudF9taW4gPiAyOgogICAgbnVtcyA9IFtyb3VuZChiYXNlICsgKHggLSBiYXNlKSAqIDAuOSwgMikgZm9yIHggaW4gbnVtc10KICAgIG51bXNbLTFdID0gcm91bmQodG90YWwgLSBzdW0obnVtc1s6LTFdKSwgMikKICAgIGN1cnJlbnRfbWluID0gbWluKG51bXMpCiAgICBjdXJyZW50X21heCA9IG1heChudW1zKQojID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CgojIOi+k+WHugpmb3IgbnVtIGluIG51bXM6CiAgICBwcmludChmIntudW06LjJmfSIpCgphbW91bnRzID0gW3JvdW5kKHggKiBwcmljZSwgMikgZm9yIHggaW4gbnVtc10KcHJpbnQoIlxuPT09PT0g5qCh6aqM57uT5p6cID09PT09IikKcHJpbnQoZiLmgLvlkozvvJp7c3VtKG51bXMpOi4yZn0iKQpwcmludChmIui2hTEwMDDlhYPvvJp7bGVuKFthIGZvciBhIGluIGFtb3VudHMgaWYgYSA+IDEwMDBdKX0iKQpwcmludChmIuacgOWkp+ebuOW3ru+8mnttYXgobnVtcyktbWluKG51bXMpOi4yZn0g4omkIDIiKQpwcmludChmIuaXoOmHjeWkje+8mntsZW4oc2V0KG51bXMpKSA9PSBsZW4obnVtcyl9Iik=