// Admin.NET 项目的版权、商标、专利和其他相关权利均受相应法律法规的保护。使用本项目应遵守相关法律法规和许可证的要求。 // // 本项目主要遵循 MIT 许可证和 Apache 许可证(版本 2.0)进行分发和使用。许可证位于源代码树根目录中的 LICENSE-MIT 和 LICENSE-APACHE 文件。 // // 不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,我们不承担任何责任! using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace Admin.NET.Core.Util; public class MajorPlanscoreTool { // 计算标准差 private static double CalculateStandardDeviation(int[] values) { double average = values.Average(); double sumOfSquares = values.Sum(val => Math.Pow(val - average, 2)); return Math.Sqrt(sumOfSquares / values.Length); } /// /// 正态分布计算 /// /// /// /// public static string CalctPercentage(List scorelist, int requestScore) { var scores = scorelist.ToArray(); // 计算平均值和标准差 double average = scores.Average(); double stdDev = CalculateStandardDeviation(scores); // 根据平均值和标准差计算可能的录取分数范围 int min = (int)Math.Floor(average - 1.96 * stdDev); // 使用 95% 置信区间 int max = (int)Math.Ceiling(average + 1.96 * stdDev); // 使用 95% 置信区间 // 确保范围在有效分数范围内(0 到 750) min = Math.Max(min, 0); max = Math.Min(max, 750); // 计算你的分数在范围内的百分比 // 计算你的分数在范围内的百分比 double percentage = 0; if (max != min) percentage = (double)(requestScore - min) / (max - min); return percentage.ToString(); } /// /// 冲稳保百分比(逻辑待调整) /// /// /// /// public static string GetPlanPercentage(int lowScore, int requestScore) { int scoreGap = requestScore - lowScore; // 正确计算方式int scoreGap = requestScore - lowScore; // 正确计算方式 double probability; if (scoreGap < -25) // 🎯 冲:低于目标分 25 分以上,低概率,最多 30% { probability = 0.05 + (25.0 / (-scoreGap + 1)) * 0.25; probability = Math.Min(probability, 0.3); } else if (scoreGap >= -25 && scoreGap <= 0) // 🎯 稳:接近目标分,概率 40%-70% { probability = 0.4 + ((25 + scoreGap) / 25.0) * 0.3; } else // 🎯 保:已达标,分差越大概率越高,70%-99% { probability = 0.7 + (Math.Min(scoreGap, 30) / 30.0) * 0.29; // 最高 99% } return (probability * 100).ToString("0") + "%"; } /// 根据分数计算冲、稳、保类型(冲=2,稳=1,保=0) /// /// 最低分 /// 目标分 /// 0-保,1-稳,2-冲 public static int GetPlanScore(int lowScore, int requestScore) { int scoreGap = requestScore - lowScore; // 正确计算方式 if (scoreGap < -25) { return 2; // 🎯 冲 } else if (scoreGap >= -25 && scoreGap <= 0) { return 1; // 🎯 稳 } else { return 0; // 🎯 保 } } /// /// 百分比 /// /// /// /// public static string GetAvgPlanPercentage(double LowScore, int requestScore) { //int minscore = requestScore - 60;//最小 //int constscore = requestScore;//中位数 //int maxscore = requestScore + 15;//最大 string percentage = string.Empty; if (LowScore >= requestScore - 60 && LowScore <= requestScore - 26) { double zval = (requestScore / LowScore) > 1 ? 0.98 : (requestScore / LowScore); percentage = zval.ToString("0%"); } if (LowScore <= requestScore - 1 && LowScore >= requestScore - 26) { double zval = (requestScore / LowScore) > 1 ? 0.79 : (requestScore / LowScore) * 0.8; percentage = zval.ToString("0%"); } if (LowScore >= requestScore && LowScore <= requestScore + 30) { double zval = (requestScore / LowScore + 30) * 0.3 > 1 ? 0.29 : (requestScore / LowScore); percentage = zval.ToString("0%"); } return percentage; } }