问题:从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]));
Comments NOTHING