Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Windows.Forms;
- namespace 選數
- {
- public partial class Form1 : Form
- {
- private Dictionary<int, int> numberFrequency;
- public Form1()
- {
- InitializeComponent();
- numberFrequency = new Dictionary<int, int>();
- textBox1.Text = "1"; // 預設最小值為1
- }
- private void button1_Click(object sender, EventArgs e)
- {
- // 檢查範圍輸入
- if (!int.TryParse(textBox1.Text, out int minValue))
- {
- MessageBox.Show("請輸入有效的最小值");
- return;
- }
- if (!int.TryParse(textBox2.Text, out int maxValue) || maxValue <= minValue)
- {
- MessageBox.Show("請輸入有效的最大值(必須大於最小值)");
- return;
- }
- // 檢查要挑幾個數字的輸入
- if (!int.TryParse(textBox5.Text, out int count) || count <= 0)
- {
- MessageBox.Show("請輸入有效的挑選數量(必須為正整數)");
- return;
- }
- // 計算範圍內的總數字量
- int rangeSize = maxValue - minValue + 1;
- // 檢查範圍內是否有足夠的數字可以選
- if (count > rangeSize)
- {
- MessageBox.Show("範圍內的數字數量不足以選出指定數量的隨機數字,請調整範圍或減少挑選數量。");
- return;
- }
- // 取得要剃除的數字陣列
- var excludedNumbers = GetExcludedNumbers(textBox3.Text);
- // 產生符合條件的隨機數字
- int[] randomArray = GenerateRandomNumbers(excludedNumbers, minValue, maxValue, count);
- // 將結果排序
- Array.Sort(randomArray);
- // 將結果轉換為字串格式
- string result = string.Join("\t", randomArray);
- // 如果 TextBox4 中已有內容,先空一行再顯示新結果
- if (!string.IsNullOrEmpty(textBox4.Text))
- {
- textBox4.AppendText(Environment.NewLine);
- }
- // 顯示結果
- textBox4.AppendText(result);
- // 更新數字出現次數
- UpdateFrequency(randomArray);
- // 顯示更新後的頻率
- DisplayFrequencies();
- }
- private void button2_Click(object sender, EventArgs e)
- {
- // 清空 TextBox4 和 ListBox1 的內容
- textBox4.Clear();
- listBox1.Items.Clear();
- numberFrequency.Clear(); // 清空數字頻率的記錄
- }
- private void UpdateFrequency(int[] numbers)
- {
- foreach (var number in numbers)
- {
- if (numberFrequency.ContainsKey(number))
- {
- numberFrequency[number]++;
- }
- else
- {
- numberFrequency[number] = 1;
- }
- }
- }
- private void DisplayFrequencies()
- {
- // 清空之前的結果
- listBox1.Items.Clear();
- // 依次數從高到低排序並顯示結果
- foreach (var kvp in numberFrequency.OrderByDescending(kvp => kvp.Value).ThenBy(kvp => kvp.Key))
- {
- listBox1.Items.Add($"Number {kvp.Key}: {kvp.Value} times");
- }
- }
- private int[] GetExcludedNumbers(string input)
- {
- // 以空白、逗號、頓號區隔輸入的數字,並轉換成整數陣列
- var numbers = input.Split(new char[] { ' ', ',', '、' }, StringSplitOptions.RemoveEmptyEntries)
- .Select(s => int.Parse(s))
- .ToArray();
- return numbers;
- }
- private int[] GenerateRandomNumbers(int[] excludedNumbers, int minValue, int maxValue, int count)
- {
- Random rnd = new Random();
- List<int> selectedNumbers = new List<int>();
- // 產生亂數直到選擇到 count 個不在被剃除清單中的數字,且在範圍內
- while (selectedNumbers.Count < count)
- {
- int randomNumber = rnd.Next(minValue, maxValue + 1); // 使用範圍內的亂數
- if (!excludedNumbers.Contains(randomNumber) && !selectedNumbers.Contains(randomNumber))
- {
- selectedNumbers.Add(randomNumber);
- }
- }
- return selectedNumbers.ToArray();
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment