gpt4 book ai didi

java - 在java中公平地生成和分配随机数

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:14:13 26 4
gpt4 key购买 nike

嗨,我一直在努力解决这个测验

一家彩票公司每周都会向获胜的参赛者分发奖品。大多数星期,不止一名参赛者获胜,在这种情况下,他们会尽可能公平地分享奖品。他们的奖品分发办公室已聘请您编写一个程序,他们将使用该程序以尽可能公平的方式分发奖品。

你写的程序应该接受两行输入:

  • 本周奖品值(value)的逗号分隔列表
  • 本周获奖者的姓名以逗号分隔

例如,输入可以是:100,800,200,500,400,1000约书亚、马赫什、莉莲

然后,程序应输出最公平的奖品分配方式,为每位获奖者显示一行,并显示分配给他们的奖品值(value)。例如,给定上面的输入,输出可能是:

  • 约书亚:100,400,500
  • 马赫什:1000
  • 莉莲:800,200

上面的例子给出了一个完美的解决方案,所有获奖者获得相同值(value)的奖品(每人总值(value) 1000)。在许多情况下,这是不可能的,但所有奖品都必须分发,不能分割。您的部分工作是决定如何为这些案例定义“公平”。例如,给定输入

400,400,500,600

巴里、希拉、奥尼扬戈、维克萨

以下是可以接受的输出,因为没有比这更公平的分配了:

  • 巴里:400
  • 希拉:400
  • 奥尼扬戈:500
  • 维克萨:600

我正在使用 java,到目前为止这是我想出的

import java.util.Scanner;
import java.util.Arrays;

public class Main {
private static String amounts;
private static String names;

public static void main(String[] args) {
Scanner userInput = new Scanner(System.in);

System.out.print(
"Please enter the lottery amounts separated by commas: ");

if (userInput.hasNext()) {
amounts = userInput.next();
// System.out.println("You entered: " + amounts);
}

System.out.print("Please enter the contestants names: ");

if (userInput.hasNext()) {
names = userInput.next();
// System.out.println("You entered: " + names);
}

String amountArray[] = amounts.split(",");
String nameArray[] = names.split(",");

award(nameArray, amountArray);
}

// Method that awards the amounts to the winners
public static void award(String names[], String amounts[]) {
int randomAmount;
int randomName;

for (int i = 0; i < amounts.length; i++) {
randomAmount = (int) (Math.random() * amounts.length);
int usedValue[] = new int[amounts.length];
usedValue[i] = randomAmount;
if (checkValueUsed(randomAmount, usedValue)) {

randomName = (int) (Math.random() * names.length);
int usedName[] = new int[names.length];

System.out.println(names[randomName] + " = "
+ amounts[randomAmount]);
} else {
break;
}
}
}

private static boolean checkValueUsed(int currentState, int[] myArray) {
boolean found = false;

for (int i = 0; !found && (i < myArray.length); i++) {
if (myArray[i] == currentState) {
found = true;
}
}
return found;
}

private void checkUsedValue(int currentState, int[] myArray) {
for (int i = 0; (i < myArray.length); i++) {

if (myArray[i] == currentState) {

}
}
}
}

我对公平的想法是选择一个随机数额并将其分配给一个随机获胜者。

最佳答案

1) 这看起来像是一道面试/考试题。我不是要评判,但是……真的吗?
2)您对公平的看法并非本意。通过给出的示例,公平意味着所有奖品都已分配并且每个获奖者的总数尽可能接近。
3)从上面-这是一个已知问题。 greedy algorithm很可能表现良好。 (我真的不明白为什么不,除非你对问题的优化部分非常具体)

关于java - 在java中公平地生成和分配随机数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23010125/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com