gpt4 book ai didi

java - 有谁知道以下骰子问题的更好解决方案?

转载 作者:行者123 更新时间:2023-12-03 21:19:02 26 4
gpt4 key购买 nike

关闭。这个问题不满足Stack Overflow guidelines .它目前不接受答案。












想改善这个问题吗?更新问题,使其成为 on-topic对于堆栈溢出。

2年前关闭。




Improve this question




有多个骰子,输入数组包含骰子正面朝上的数字。骰子是 6 面的。计算骰子的最小旋转总数,使所有面都相同。 1 只需要旋转一次即可使 2、3、4 和 5 朝上,但至少需要旋转两次才能使其成为面 6,因为 6 是 1 的对面。2 的对面是 5,而 3 是4.

我想出了解决方案 ,但我相信应该有更好的解决方案。

例如:

  • A = {1,1,6} , 答案 = 2。将 6 旋转两次得到 1。
  • A = {1,2,3} , 答案 = 2。旋转 1 和 2,使它们变为 3。
  • A = {1,6,2,3} , 答案 = 3. 旋转 1、6 和 3 使它们全部为 2。
    import java.util.*;

    public class DiceProblem {
    public static void main(String args[]){
    int[] A = {3,4,1,2,4,2,3,5,1,2,3,4,6,2,4,1,5,2};
    Map<Integer, Integer> countMap = new HashMap<>();
    int rotation = 0;
    int diceCount;
    int maxDiceNumber = A[0];
    int OppositeOfMaxDiceNumber;
    int max = 1;

    for(int i = 1; i <= 6 ; i++){
    diceCount = 0;
    for (int value : A) {
    if(i == value){
    diceCount++;
    }
    }
    countMap.put(i, diceCount);
    if(diceCount > max){
    max = diceCount;
    maxDiceNumber = i;
    }
    }

    if(max == 1){
    if(countMap.get(1).equals(countMap.get(6)) && countMap.get(1) != 0 && countMap.get(2) != 0){
    maxDiceNumber = 2;
    }else if(countMap.get(2).equals(countMap.get(5)) && countMap.get(2) != 0 && countMap.get(3) != 0){
    maxDiceNumber = 3;
    }else if(countMap.get(3).equals(countMap.get(4)) && countMap.get(1) != 0){
    maxDiceNumber = 1;
    }else if(countMap.get(2) != 0){
    maxDiceNumber = 2;
    }else if(countMap.get(5) != 0){
    maxDiceNumber = 5;
    }else if(countMap.get(6) != 0){
    maxDiceNumber = 6;
    }
    }

    System.out.println("Max Dice Number: "+ maxDiceNumber);
    OppositeOfMaxDiceNumber = createOpposite(maxDiceNumber);
    System.out.println("Opposite Dice Number: "+ OppositeOfMaxDiceNumber);

    Iterator it2 = countMap.entrySet().iterator();
    while (it2.hasNext()) {
    Map.Entry pair = (Map.Entry)it2.next();
    System.out.println(pair.getKey() + " = " + pair.getValue());
    if((int)(pair.getValue()) > 0 && (int)(pair.getKey()) != maxDiceNumber){
    if((int)(pair.getKey()) == OppositeOfMaxDiceNumber){
    rotation = rotation + (2 * (int)(pair.getValue()));
    }else {
    rotation = rotation + ((int)(pair.getValue()));
    }
    }

    it2.remove(); // avoids a ConcurrentModificationException
    }
    System.out.println("Number of Minimum Rotations: "+ rotation);

    }
    private static int createOpposite(int key){
    switch (key) {
    case 1:
    return 6;
    case 2:
    return 5;
    case 3:
    return 4;
    case 4:
    return 3;
    case 5:
    return 2;
    case 6:
    return 1;
    }
    return 0;
    }}
  • 最佳答案

    public class DiceProblem {
    public static void main(String args[]){

    int[] A = {3,4,1,2,4,2,3,5,1,2,3,4,6,2,4,1,5,2};
    int flip_count;
    int min_flip_count = 9999999;

    for (int value : A) {
    flip_count = 0;
    for (int i : A) {
    if (value == i) {
    flip_count += 0;
    } else if (value + i == 7) {
    flip_count += 2;
    } else {
    flip_count += 1;
    }
    }
    if (flip_count < min_flip_count) {
    min_flip_count = flip_count;
    }
    }

    System.out.println("Minimum Flip Count:" + min_flip_count);
    }
    }

    关于java - 有谁知道以下骰子问题的更好解决方案?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56712677/

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