天天看點

科大訊飛訊飛星火與ChatGPT的對比

作者:我想長成豬兒蟲

用科大訊飛與ChatGPT 通過描述 實作一段Java代碼

描述内容 “n 個獎品,每個獎品的中獎機率不一樣,實作抽獎 Java代碼”

下面是兩者的回複

科大訊飛

科大訊飛訊飛星火與ChatGPT的對比

完整代碼如下:

import java.util.ArrayList;

import java.util.List;

import java.util.Random;



public class Lottery {

    public static void main(String[] args) {

        // 假設有10個獎項,每個獎項的中獎機率為0.1

        List<Integer> prizes = new ArrayList<>();

        for (int i = 1; i <= 10; i++) {

            prizes.add(i);

        }



        // 每個獎項的中獎機率清單

        List<Double> probabilityList = new ArrayList<>();

        for (int i = 0; i < prizes.size(); i++) {

            probabilityList.add((double) 1 / prizes.size());

        }



        // 随機抽取一個獎項

        Random random = new Random();

        int winnerIndex = random.nextInt(prizes.size());

        int winner = prizes.get(winnerIndex);



        // 根據中獎機率計算中獎機率值

        double probability = probabilityList.get(winnerIndex);

        double totalProbability = probabilityList.stream().reduce((a, b) -> a + b).getAsDouble();

        double winningProbability = Math.pow(probability, totalProbability);



        // 輸出中獎結果

        System.out.println("恭喜編号為" + winner + "的選手獲得一等獎!中獎機率為:" + winningProbability);

    }

}

           

下面是 ChatGPT 的回答

科大訊飛訊飛星火與ChatGPT的對比

完整代碼如下:

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

public class Lottery {

    private List<Prize> prizes;
    private Random random;

    public Lottery() {
        prizes = new ArrayList<>();
        random = new Random();
    }

    public void addPrize(String name, double probability) {
        prizes.add(new Prize(name, probability));
    }

    public String drawPrize() {
        double totalProbability = 0.0;

        // 計算總機率
        for (Prize prize : prizes) {
            totalProbability += prize.getProbability();
        }

        double randomValue = random.nextDouble() * totalProbability;
        double cumulativeProbability = 0.0;

        // 根據機率抽取獎品
        for (Prize prize : prizes) {
            cumulativeProbability += prize.getProbability();
            if (randomValue <= cumulativeProbability) {
                return prize.getName();
            }
        }

        return null; // 未中獎
    }

    public static void main(String[] args) {
        Lottery lottery = new Lottery();
        lottery.addPrize("獎品A", 0.2); // 中獎機率為 0.2
        lottery.addPrize("獎品B", 0.3); // 中獎機率為 0.3
        lottery.addPrize("獎品C", 0.5); // 中獎機率為 0.5

        String luckyPrize = lottery.drawPrize();
        if (luckyPrize != null) {
            System.out.println("恭喜您中獎了!獲得了:" + luckyPrize);
        } else {
            System.out.println("很遺憾,您沒有中獎。");
        }
    }
}

class Prize {
    private String name;
    private double probability;

    public Prize(String name, double probability) {
        this.name = name;
        this.probability = probability;
    }

    public String getName() {
        return name;
    }

    public double getProbability() {
        return probability;
    }
}
           

還有很大的發展空間呀

繼續閱讀