473. Matchsticks to Square

1648545-20190824161836994-66756567.png

https://www.acwing.com/solution/LeetCode/content/3785/

class Solution {
    private boolean flag;

    public boolean makesquare(int[] nums) {
        int temp = 0;
        for (int i = 0; i < nums.length; i++) {
            temp += nums[i];
        }
        if (nums.length == 0 || temp % 4 != 0)
            return false;
        int count[] = new int[4];
        Arrays.sort(nums);
        dfs(nums, count, nums.length-1,temp/4);
        return flag;
    }

    private void dfs(int[] nums, int[] count, int x,int avg) {
        if (x == -1) {
            for (int i = 0; i < 3; i++) {
                if (count[i] != count[i + 1])
                    return;
            }
            flag = true;
        } else {
            count[0] += nums[x];
            if(count[0]<=avg)dfs(nums, count, x - 1,avg);
            count[0] -= nums[x];
            count[1] += nums[x];
            if(count[1]<=avg)dfs(nums, count, x - 1,avg);
            count[1] -= nums[x];
            count[2] += nums[x];
            if(count[2]<=avg)dfs(nums, count, x - 1,avg);
            count[2] -= nums[x];
            count[3] += nums[x];
            if(count[3]<=avg)dfs(nums, count, x - 1,avg);
            count[3] -= nums[x];
        }
    }
}

转载于:https://www.cnblogs.com/cznczai/p/11405041.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,下面给出一个简单的 Java Swing 代码实现: ```java import java.awt.*; import java.awt.event.*; import javax.swing.*; public class MatchsticksGame extends JFrame { private int totalMatchsticks, maxMatchsticksPerTurn; private boolean computerFirst; private JLabel statusLabel, matchsticksLabel; private JButton takeButton; private JTextArea historyTextArea; private int currentMatchsticks, turnCount; private boolean isComputerTurn, gameOver; public MatchsticksGame(int totalMatchsticks, boolean computerFirst, int maxMatchsticksPerTurn) { super("Matchsticks Game"); this.totalMatchsticks = totalMatchsticks; this.computerFirst = computerFirst; this.maxMatchsticksPerTurn = maxMatchsticksPerTurn; currentMatchsticks = totalMatchsticks; turnCount = 0; isComputerTurn = computerFirst; gameOver = false; statusLabel = new JLabel("Game started. " + (isComputerTurn ? "Computer" : "User") + " goes first."); matchsticksLabel = new JLabel(getMatchsticksString(currentMatchsticks)); takeButton = new JButton("Take"); takeButton.addActionListener(new TakeButtonListener()); historyTextArea = new JTextArea(10, 40); historyTextArea.setEditable(false); JScrollPane scrollPane = new JScrollPane(historyTextArea); JPanel topPanel = new JPanel(); topPanel.add(statusLabel); topPanel.add(Box.createHorizontalStrut(20)); topPanel.add(takeButton); topPanel.add(Box.createHorizontalStrut(20)); topPanel.add(matchsticksLabel); JPanel bottomPanel = new JPanel(); bottomPanel.add(scrollPane); setLayout(new BorderLayout()); add(topPanel, BorderLayout.NORTH); add(bottomPanel, BorderLayout.SOUTH); pack(); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setVisible(true); if (computerFirst) { takeMatches(computeBestMove()); isComputerTurn = false; } } private String getMatchsticksString(int count) { StringBuilder sb = new StringBuilder(); for (int i = 0; i < count; i++) { sb.append("| "); } return sb.toString(); } private int computeBestMove() { // TODO: Implement Minimax algorithm to compute best move return 1; } private void takeMatches(int count) { int actualCount = Math.min(count, maxMatchsticksPerTurn); currentMatchsticks -= actualCount; matchsticksLabel.setText(getMatchsticksString(currentMatchsticks)); historyTextArea.append((isComputerTurn ? "Computer" : "User") + " takes " + actualCount + " matchsticks.\n"); if (currentMatchsticks == 1) { gameOver = true; statusLabel.setText((isComputerTurn ? "Computer" : "User") + " wins!"); historyTextArea.append((isComputerTurn ? "Computer" : "User") + " wins!\n"); takeButton.setEnabled(false); } else { isComputerTurn = !isComputerTurn; statusLabel.setText("Current turn: " + (isComputerTurn ? "Computer" : "User")); if (isComputerTurn) { takeMatches(computeBestMove()); } } } private class TakeButtonListener implements ActionListener { public void actionPerformed(ActionEvent e) { if (!gameOver && !isComputerTurn) { try { int count = Integer.parseInt(JOptionPane.showInputDialog("Please enter the number of matchsticks to take:")); if (count < 1 || count > maxMatchsticksPerTurn || count > currentMatchsticks - 1) { JOptionPane.showMessageDialog(null, "Invalid number of matchsticks. Please try again."); } else { takeMatches(count); } } catch (NumberFormatException ex) { JOptionPane.showMessageDialog(null, "Invalid number format. Please try again."); } } } } public static void main(String[] args) { int totalMatchsticks = Integer.parseInt(JOptionPane.showInputDialog("Please enter the total number of matchsticks:")); boolean computerFirst = JOptionPane.showConfirmDialog(null, "Do you want the computer to go first?", "Choose", JOptionPane.YES_NO_OPTION) == JOptionPane.YES_OPTION; int maxMatchsticksPerTurn = Integer.parseInt(JOptionPane.showInputDialog("Please enter the maximum number of matchsticks per turn:")); new MatchsticksGame(totalMatchsticks, computerFirst, maxMatchsticksPerTurn); } } ``` 这个代码实现了一个简单的图形界面,用户可以输入游戏参数,并通过按钮和文本框与计算机进行交互。具体来说,用户每次点击按钮,程序会弹出一个对话框让用户输入拿走的火柴数,然后根据用户的输入更新游戏状态。在计算机回合时,程序会使用 Minimax 算法计算最优决策,并自动更新游戏状态。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值