[#1792]feat(MaxAverageRatio) : add C# brute force solution
This commit is contained in:
130
problems/1792-maximum-average-pass-ratio/csharp/Program.cs
Normal file
130
problems/1792-maximum-average-pass-ratio/csharp/Program.cs
Normal file
@@ -0,0 +1,130 @@
|
||||
// LeetCode 1792: Maximum Average Pass Ratio
|
||||
// 難度: Medium
|
||||
// 日期: 2025-09-01
|
||||
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
|
||||
public class Solution {
|
||||
public double MaxAverageRatioByBruteForce(int[][] classes, int extraStudents)
|
||||
{
|
||||
var n = classes.Length;
|
||||
var pass = new int[n];
|
||||
var total = new int[n];
|
||||
|
||||
for (var i = 0; i < n; i++)
|
||||
{
|
||||
pass[i] = classes[i][0];
|
||||
total[i] = classes[i][1];
|
||||
}
|
||||
|
||||
for (int student = 0; student < extraStudents; student++)
|
||||
{
|
||||
int bestClass = -1;
|
||||
double maxInprovement = 0;
|
||||
|
||||
for (int i = 0; i < n; i++)
|
||||
{
|
||||
double currentAvg = CalculateAvergaeRatio(pass, total);
|
||||
|
||||
pass[i]++;
|
||||
total[i]++;
|
||||
|
||||
double newAvg = CalculateAvergaeRatio(pass, total);
|
||||
double improvement = newAvg - currentAvg;
|
||||
|
||||
pass[i]--;
|
||||
total[i]--;
|
||||
|
||||
if (improvement > maxInprovement)
|
||||
{
|
||||
maxInprovement = improvement;
|
||||
bestClass = i;
|
||||
}
|
||||
}
|
||||
|
||||
if (bestClass != -1)
|
||||
{
|
||||
pass[bestClass]++;
|
||||
total[bestClass]++;
|
||||
}
|
||||
}
|
||||
|
||||
return CalculateAvergaeRatio(pass, total);
|
||||
}
|
||||
|
||||
private double CalculateAvergaeRatio(int[] pass, int[] total) {
|
||||
double sum = 0;
|
||||
for (var i = 0; i < pass.Length; i++)
|
||||
{
|
||||
sum += (double)pass[i] / total[i];
|
||||
}
|
||||
return sum / pass.Length;
|
||||
}
|
||||
}
|
||||
|
||||
// 測試程式
|
||||
public class Program
|
||||
{
|
||||
public static void Main()
|
||||
{
|
||||
Solution solution = new Solution();
|
||||
|
||||
// TestCase
|
||||
TestCase1(solution);
|
||||
TestCase2(solution);
|
||||
}
|
||||
|
||||
static void TestCase1(Solution solution)
|
||||
{
|
||||
// Input:
|
||||
int[][] classes = new int[][]
|
||||
{
|
||||
new int[] {1, 2},
|
||||
new int[] {3, 5},
|
||||
new int[] {2, 2}
|
||||
};
|
||||
int extraStudents = 2;
|
||||
|
||||
Console.WriteLine("Test 1: ");
|
||||
Console.WriteLine($"classes: [{string.Join("], [", classes.Select(c => string.Join(", ", c)))}]");
|
||||
Console.WriteLine($"extraStudents: {extraStudents}");
|
||||
|
||||
// Expected:
|
||||
Console.WriteLine("Expect: ");
|
||||
Console.WriteLine($"output: 0.78333");
|
||||
|
||||
// Actual:
|
||||
Console.WriteLine("Actual: ");
|
||||
Console.WriteLine($"Brute Force: {solution.MaxAverageRatioByBruteForce(classes, extraStudents):F6}");
|
||||
//Console.WriteLine($"output: {solution.MaxAverageRatio(classes, extraStudents):F6}");
|
||||
}
|
||||
|
||||
|
||||
static void TestCase2(Solution solution)
|
||||
{
|
||||
// Input:
|
||||
int[][] classes = new int[][]
|
||||
{
|
||||
new int[] {2, 4},
|
||||
new int[] {3, 9},
|
||||
new int[] {4, 5},
|
||||
new int[] {2, 10}
|
||||
};
|
||||
int extraStudents = 4;
|
||||
|
||||
Console.WriteLine("Test 2: ");
|
||||
Console.WriteLine($"classes: [{string.Join("], [", classes.Select(c => string.Join(", ", c)))}]");
|
||||
Console.WriteLine($"extraStudents: {extraStudents}");
|
||||
|
||||
// Expected:
|
||||
Console.WriteLine("Expect: ");
|
||||
Console.WriteLine($"output: 0.53485");
|
||||
|
||||
// Actual:
|
||||
Console.WriteLine("Actual: ");
|
||||
Console.WriteLine($"Brute Force: {solution.MaxAverageRatioByBruteForce(classes, extraStudents):F6}");
|
||||
//Console.WriteLine($"output: {solution.MaxAverageRatio(classes, extraStudents):F6}");
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user