首页 > 解决方案 > 如何递减 ArrayList 中的每一列并使用 Java 中递减列的总和创建新列

问题描述

我正在尝试为保加利亚纸牌提出一种新算法。在互联网上,这个游戏只有一个解决方案,每个人都只是应付它。在这里,我试图以一种不同的方式来做。这是描述

在本作业中,您将模拟保加利亚纸牌游戏。游戏以 45 张牌开始。将它们随机分成若干堆。例如,您可以从大小为 20、5、1、9 和 10 的牌堆开始。在每一轮中,您从每堆牌中取出一张牌,用这些牌组成一个新牌堆。例如,样本起始配置将转换为大小为 19、4、8、10 和 5 的堆。当这些堆的大小为 1、2、3、4、5、6、7、8、和 9,按某种顺序。(可以证明你总是以这样的配置结束。)在你的程序中,产生一个随机的起始配置并打印出来。然后继续应用纸牌步骤并打印结果。达到纸牌最终配置时停止。

所以我做了什么,我创建了 2 Dimensional ArrayList 并用随机数量的桩填充它。每堆都有一些金额卡。总和正好是 45。

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Random;

public class BulgarianSolitare {


    public static void main(String[] args) {


        int numberOfCards = 45;
        Random random = new Random();
        int numberOfPiles = random.nextInt(numberOfCards) + 1;
        System.out.println("Number of piles - " + numberOfPiles);

        ArrayList<ArrayList<Integer>> piles = new ArrayList();
        ArrayList<Integer> eachPile = new ArrayList();
        ArrayList<Integer> lastPile = new ArrayList();


        if (numberOfCards % numberOfPiles != 0) {
            for (int i = 0; i < numberOfPiles; i++) {
                for (int j = 1; j <= numberOfCards / numberOfPiles; j++) {
                eachPile.add(j);
                }
                piles.add(eachPile);
                eachPile = new ArrayList();
            }

            for (int i = 0; i < numberOfCards % numberOfPiles; i++) {
                lastPile.add(i + 1);
            }
            piles.add(lastPile);
            eachPile = new ArrayList();


        } else {

            for (int i = 0; i < numberOfPiles; i++) {
                for (int j = 1; j <= numberOfCards / numberOfPiles; j++) {
                    eachPile.add(j);

                }
                piles.add(eachPile);
                eachPile = new ArrayList();
            }
        }

        System.out.println("This is your beginning set up:");
        for (int i = 0; i < piles.size(); i++) {
            System.out.print("[" + piles.get(i).size() + "]");

        }   
    }
}

这个程序的输出是。

桩数 - 17

这是您的初始设置:

[2][2][2][2][2][2][2][2][2][2][2][2][2][2][2][2][2 ][11]

现在我需要编写程序的主要逻辑,但是无论我在写什么,我都会得到一个超出边界的错误。有人可以帮我解决这个游戏的算法吗?

标签: javaalgorithmmatharraylistmultidimensional-array

解决方案


推荐阅读