# ====================== 配置区 ======================
total = 134.8
price = 64.5
# ====================================================
import random
random.seed(1) # 结果永远固定
max_single = 1000 / price
count = int(total / max_single) + 1
# 生成不重复、合法数字
nums = []
base = round(total / count, 2)
for i in range(count):
val = round(base + (i - count//2) * 0.02, 2)
while not (val * price * 100).is_integer():
val = round(val + 0.01, 2)
# 强制不重复
while val in nums:
val = round(val + 0.01, 2)
while not (val * price * 100).is_integer():
val = round(val + 0.01, 2)
nums.append(val)
random.shuffle(nums)
# 精准补总和,绝对不重复
diff = round(total - sum(nums), 2)
step = 0.01
max_attempts = 5000
i = 0
while abs(diff
) > 0.001 and i
< max_attempts
: idx = random.randint(0, count-1)
current = nums[idx]
new_val = round(current + step if diff>0 else current - step, 2)
# 规则1:两位小数乘积
if not (new_val * price * 100).is_integer():
i += 1
continue
# 规则2:绝对不重复
temp = nums.copy()
if new_val not in temp and new_val > 0:
nums[idx] = new_val
diff = round(total - sum(nums), 2)
i += 1
# 最后全局强制去重(终极保险)
final = []
for num in nums:
while num in final:
num = round(num + 0.01, 2)
while not (num * price * 100).is_integer():
num = round(num + 0.01, 2)
final.append(num)
# 重新校准总和
s = sum(final)
if abs(total
- s
) > 0.001: final[0] = round(final[0] + (total - s), 2)
# ====================== 输出纯数字 ======================
for n in final:
print(n)
print("\n总和校验:", round(sum(final), 2))
# ======================================================
IyA9PT09PT09PT09PT09PT09PT09PT09IOmFjee9ruWMuiA9PT09PT09PT09PT09PT09PT09PT09CnRvdGFsID0gMTM0LjggCnByaWNlID0gNjQuNSAgICAgCiMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoKaW1wb3J0IHJhbmRvbQpyYW5kb20uc2VlZCgxKSAgIyDnu5PmnpzmsLjov5zlm7rlrpoKCm1heF9zaW5nbGUgPSAxMDAwIC8gcHJpY2UKY291bnQgPSBpbnQodG90YWwgLyBtYXhfc2luZ2xlKSArIDEKCiMg55Sf5oiQ5LiN6YeN5aSN44CB5ZCI5rOV5pWw5a2XCm51bXMgPSBbXQpiYXNlID0gcm91bmQodG90YWwgLyBjb3VudCwgMikKZm9yIGkgaW4gcmFuZ2UoY291bnQpOgogICAgdmFsID0gcm91bmQoYmFzZSArIChpIC0gY291bnQvLzIpICogMC4wMiwgMikKICAgIHdoaWxlIG5vdCAodmFsICogcHJpY2UgKiAxMDApLmlzX2ludGVnZXIoKToKICAgICAgICB2YWwgPSByb3VuZCh2YWwgKyAwLjAxLCAyKQogICAgIyDlvLrliLbkuI3ph43lpI0KICAgIHdoaWxlIHZhbCBpbiBudW1zOgogICAgICAgIHZhbCA9IHJvdW5kKHZhbCArIDAuMDEsIDIpCiAgICAgICAgd2hpbGUgbm90ICh2YWwgKiBwcmljZSAqIDEwMCkuaXNfaW50ZWdlcigpOgogICAgICAgICAgICB2YWwgPSByb3VuZCh2YWwgKyAwLjAxLCAyKQogICAgbnVtcy5hcHBlbmQodmFsKQoKcmFuZG9tLnNodWZmbGUobnVtcykKCiMg57K+5YeG6KGl5oC75ZKM77yM57ud5a+55LiN6YeN5aSNCmRpZmYgPSByb3VuZCh0b3RhbCAtIHN1bShudW1zKSwgMikKc3RlcCA9IDAuMDEKbWF4X2F0dGVtcHRzID0gNTAwMAppID0gMAoKd2hpbGUgYWJzKGRpZmYpID4gMC4wMDEgYW5kIGkgPCBtYXhfYXR0ZW1wdHM6CiAgICBpZHggPSByYW5kb20ucmFuZGludCgwLCBjb3VudC0xKQogICAgY3VycmVudCA9IG51bXNbaWR4XQogICAgbmV3X3ZhbCA9IHJvdW5kKGN1cnJlbnQgKyBzdGVwIGlmIGRpZmY+MCBlbHNlIGN1cnJlbnQgLSBzdGVwLCAyKQoKICAgICMg6KeE5YiZMe+8muS4pOS9jeWwj+aVsOS5mOenrwogICAgaWYgbm90IChuZXdfdmFsICogcHJpY2UgKiAxMDApLmlzX2ludGVnZXIoKToKICAgICAgICBpICs9IDEKICAgICAgICBjb250aW51ZQoKICAgICMg6KeE5YiZMu+8mue7neWvueS4jemHjeWkjQogICAgdGVtcCA9IG51bXMuY29weSgpCiAgICB0ZW1wLnJlbW92ZShjdXJyZW50KQogICAgaWYgbmV3X3ZhbCBub3QgaW4gdGVtcCBhbmQgbmV3X3ZhbCA+IDA6CiAgICAgICAgbnVtc1tpZHhdID0gbmV3X3ZhbAogICAgICAgIGRpZmYgPSByb3VuZCh0b3RhbCAtIHN1bShudW1zKSwgMikKICAgIGkgKz0gMQoKIyDmnIDlkI7lhajlsYDlvLrliLbljrvph43vvIjnu4jmnoHkv53pmanvvIkKZmluYWwgPSBbXQpmb3IgbnVtIGluIG51bXM6CiAgICB3aGlsZSBudW0gaW4gZmluYWw6CiAgICAgICAgbnVtID0gcm91bmQobnVtICsgMC4wMSwgMikKICAgICAgICB3aGlsZSBub3QgKG51bSAqIHByaWNlICogMTAwKS5pc19pbnRlZ2VyKCk6CiAgICAgICAgICAgIG51bSA9IHJvdW5kKG51bSArIDAuMDEsIDIpCiAgICBmaW5hbC5hcHBlbmQobnVtKQoKIyDph43mlrDmoKHlh4bmgLvlkowKcyA9IHN1bShmaW5hbCkKaWYgYWJzKHRvdGFsIC0gcykgPiAwLjAwMToKICAgIGZpbmFsWzBdID0gcm91bmQoZmluYWxbMF0gKyAodG90YWwgLSBzKSwgMikKCiMgPT09PT09PT09PT09PT09PT09PT09PSDovpPlh7rnuq/mlbDlrZcgPT09PT09PT09PT09PT09PT09PT09PQpmb3IgbiBpbiBmaW5hbDoKICAgIHByaW50KG4pCgpwcmludCgiXG7mgLvlkozmoKHpqozvvJoiLCByb3VuZChzdW0oZmluYWwpLCAyKSkKIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0=