// 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;
}
}