随机数

发布于 2024-05-05  1194 次阅读


问题:从10000到99999随机选出40000个整数,且不重复。令X等于某一10位整数,从这40000个整数中选出2个整数,使其形成的组合数字与X之差的绝对值最小。

python

import random
import bisect

# 生成40000个不重复的随机整数,并进行排序
random_numbers = random.sample(range(10000, 99999), 40000)

# 假设X是一个10位整数
X = 1234567890

x1 = int(X/100000)
print(x1)

x2 = X% 100000
print(x2)

# 初始化最小差值和对应的组合
min_difference_1 = float('inf')
min_difference_2 = float('inf')
num_selected1 = None
num_selected2 = None

for random_number in random_numbers:
    difference1 = abs(x1 - random_number)
    if difference1 < min_difference_1:
        min_difference_1 = difference1
        num_selected1 = random_number

random_numbers.remove(num_selected1)

for random_number in random_numbers:
    difference2 = abs(x2 - random_number)
    if difference2 < min_difference_2:
        min_difference_2 = difference2
        num_selected2 = random_number

min_difference = min_difference_1*10000 + min_difference_2

# 输出结果
print("最小差值:", min_difference)
print("组合数字:", num_selected1,num_selected2)
% 生成40000个不重复的随机整数,并进行排序
random_numbers = datasample(10000:99999, 40000, 'Replace', false);

% 假设X是一个10位整数
X = 1234567890;

x1 = floor(X/100000);
disp(x1);

x2 = mod(X, 100000);
disp(x2);

% 初始化最小差值和对应的组合
min_difference_1 = inf;
min_difference_2 = inf;
num_selected1 = [];
num_selected2 = [];

for i = 1:numel(random_numbers)
    random_number = random_numbers(i);

    difference1 = abs(x1 - random_number);
    if difference1 < min_difference_1
        min_difference_1 = difference1;
        num_selected1 = random_number;
    end
end

random_numbers(random_numbers == num_selected1) = [];

for i = 1:numel(random_numbers)
    random_number = random_numbers(i);

    difference2 = abs(x2 - random_number);
    if difference2 < min_difference_2
        min_difference_2 = difference2;
        num_selected2 = random_number;
    end
end

min_difference = min_difference_1*10000 + min_difference_2;

% 输出结果
disp("最小差值:" + min_difference);
disp("组合数字:" + num2str([num_selected1, num_selected2]));