【数据结构】——顺序表练习

杨辉三角

在这里插入图片描述
在这里插入图片描述

// 杨辉三角
    public List<List<Integer>> generate(int numRows) {
        List<List<Integer>> ret = new ArrayList<>();
        List<Integer> list = new ArrayList<>();
        list.add(1);
        ret.add(list);

        for (int i = 1; i < numRows; i++) {
            List<Integer> curRow = new ArrayList<>();
            // 第一个元素
            curRow.add(1);

            // 中间元素
            for (int j = 1; j < i; j++) {
                List<Integer> prevRow = ret.get(i-1);
                int x = prevRow.get(j) + prevRow.get(j-1);
                curRow.add(x);
            }

            // 最后一个元素
            curRow.add(1);
            ret.add(curRow);
        }

        return ret;
    }

纸牌游戏

package cardgame;

/**
 * @Author lenovo
 * @Description J20231125
 */
public class Card {
    public String suit;// 花色
    public int num;// 数字

    public Card(String suit, int num) {
        this.suit = suit;
        this.num = num;
    }

    @Override
    public String toString() {
        return suit + "" + num;
    }
}

package cardgame;

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

/**
 * @Author lenovo
 * @Description J20231125
 */
public class CardGame {

    public static final String[] suits = {"♥","♠","♦","♣"};

    /**
     * 取得并准备一副扑克牌
     * 现在假定只有 52 张牌,抛去大小王
     * @return
     */
    public List<Card> buyCard() {
        List<Card> cardList = new ArrayList<>();
        // 造一副扑克牌,每张牌有花色和数字
        for (String suit : suits) {
            for (int j = 1; j <= 13; j++) {
                Card card = new Card(suit, j);
                cardList.add(card);
            }
        }
        return cardList;
    }

    /**
     * 洗牌
     * 随机交换
     * @return
     */
    public void shuffle(List<Card> cardList) {
        Random random = new Random();
        for (int i = cardList.size() - 1; i > 0; i--) {
            int index = random.nextInt(i);
            swap(cardList,i,index);
        }
    }

    private void swap(List<Card> cardList, int i, int index) {
        Card tmp = cardList.get(i);
        cardList.set(i,cardList.get(index));
        cardList.set(index,tmp);
    }

    /**
     * 抓牌
     * 三个人,每个人每轮抓一次,共抓五轮
     * @return
     */
    public List<List<Card>> getCard(List<Card> cardList) {
        List<List<Card>> hand = new ArrayList<>();

        List<Card> hand1 = new ArrayList<>();
        List<Card> hand2 = new ArrayList<>();
        List<Card> hand3 = new ArrayList<>();

        hand.add(hand1);
        hand.add(hand2);
        hand.add(hand3);

        for (int i = 0; i < 5; i++) {
            for (int j = 0; j < 3; j++) {
                // 每次相当于拿走最顶上的一张牌,然后放到此时抓牌人的手上
                hand.get(j).add(cardList.remove(0));// remove的返回值是对象
            }
        }

        return hand;
    }

}

package cardgame;

import java.util.ArrayList;
import java.util.List;

/**
 * @Author lenovo
 * @Description J20231125
 */
public class Main {
    public static void main(String[] args) {
        CardGame cardGame = new CardGame();
        System.out.println("准备一副扑克牌");
        List<Card> cardList = cardGame.buyCard();
        System.out.println(cardList);

        System.out.println("洗牌");
        cardGame.shuffle(cardList);
        System.out.println(cardList);

        System.out.println("抓牌");
        List<List<Card>> gameCard = cardGame.getCard(cardList);
        for (int i = 0; i < gameCard.size(); i++) {
            System.out.println("第 " + (i+1) + " 个抓到的牌是:" + gameCard.get(i));
        }

        System.out.println("剩余的牌");
        System.out.println(cardList);

    }
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值