直接上代码:
C#代码。先随机一半,另一半用和来求,然后用洗牌算法过一遍即可。
static void Main(string[] args)
{
float[] arry = new float[100];
Random rd = new Random(Guid.NewGuid().GetHashCode());
for (int i = 0; i < 50; i++)
{
int num = rd.Next(95, 106);
arry[i] = (float)num / 10;
arry[50 + i] = (float)(200 - num) / 10;
}
for (int i = 100 - 1; i >= 1; i--) //洗牌算法
{
int p = rd.Next(0, i);
if (p != i)
{
float temp = arry[p];
arry[p] = arry[i];
arry[i] = temp;
}
}
int index = 0;
double ans = 0;
foreach (var item in arry)
{
Console.WriteLine(index++ + " :" + item);
ans += item;
}
Console.WriteLine(ans);
}
JS代码:
function randomRange(min, max) {
return (Math.random() * (max - min) + min);
}
let a=[];
for(let i=0;i<50;i++){
let rand=Number(randomRange(9.5,10).toFixed(1));
a.push(rand);
a.push(20-rand);
}
for( let i = 100 - 1; i >= 1; i--){ //洗牌算法
let p = Number(randomRange(0, i).toFixed());
if(p != i){
let temp=a[p];
a[p]=a[i];
a[i]=temp;
}
}
let ans=0;
a.forEach(item=>ans+=item)
console.log(a,ans);
gpt思路:
1,随机95到105区间的随机数,并记下总数。
2.如果超过1万,看看超出多少数值N,然后在N个随机位减1。不可以减出下限(低于跳过本次)。
3.如果低于1万,看看缺少多少数值N,然后在N个随机位加1。不可以加出上限(超出跳过本次)。
let nums = [];
let sum = 0;
for (let i = 0; i < 100; i++) {
let num = Math.floor(Math.random() * 11 + 95);
nums.push(num);
sum += num;
}
if (sum > 10000) {
let diff = sum - 10000;
for (let i = 0; i < diff;) {
let index = Math.floor(Math.random() * 100);
if (nums[index] > 95) {
nums[index]--;
i++;
sum--;
}
}
} else if (sum < 10000) {
let diff = 10000 - sum;
for (let i = 0; i < diff; ) {
let index = Math.floor(Math.random() * 100);
if (nums[index] < 105) {
nums[index]++;
sum++;
i++;
}
}
}
console.log(nums);
console.log(sum);
优化后: 这是随机50个数,区间是90到110,和为5000
function generateNumbers() {
let numbers = [];
let sum = 0;
for (let i = 0; i < 50; i++) {
let number = Math.floor(Math.random() * (110 - 90 + 1)) + 90;
numbers.push(number);
sum += number;
}
let diff = 5000 - sum;
// 调整随机数使总和等于5000
while (diff !== 0) {
let randomIndex = Math.floor(Math.random() * 50);
let adjustment = diff > 0 ? 1 : -1;
numbers[randomIndex] += adjustment;
diff -= adjustment;
}
return numbers;
}
let randomNumbers = generateNumbers();
console.log(randomNumbers);