我正在尝试一种新的保加利亚孤岛算法。在互联网上,这个游戏只有一个解决方案,每个人都在接受它。我试着用一种不同的方式来做。这是描述
在本作业中,您将模拟保加利亚纸牌游戏。游戏以45张牌开始。把它们随机分成若干堆。例如,可以从大小为20、5、1、9和10的桩开始。在每一轮中,你从每一堆牌中取出一张牌,用这些牌组成一个新的牌堆。例如,样本开始配置将转换为大小为19、4、8、10和5的堆。当纸牌的大小依次为1、2、3、4、5、6、7、8和9时,纸牌就结束了。(可以显示您总是以这样的配置结束)在您的程序中,生成一个随机启动配置并打印它。然后继续应用纸牌步骤并打印结果。达到纸牌最终配置时停止。
所以我创建了二维数组列表,并用随机的堆填充它。每一堆都有一些金额卡。总数正好是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〕
现在我需要写程序的主要逻辑,但是无论我写什么,我都会得到一个ob边界错误。有谁能帮我弄一下这个游戏。