using System.Collections.Generic;
public class MonthlyContributions {
public MonthlyContributions(double contri, int yrs, double avgGrwth) {
this.Contribution = contri;
this.AverageGrowth = avgGrwth;
public double Contribution;
public double AverageGrowth;
public static void Main()
double managementFee = 0.0079;
double contributionFee = 0.00;
List<MonthlyContributions> contributions = new List<MonthlyContributions> {
{ new MonthlyContributions(825, 4, 0.06) },
{ new MonthlyContributions(1100, 10, 0.06) },
{ new MonthlyContributions(1375, 10, 0.06) },
{ new MonthlyContributions(1650, 5, 0.06) },
{ new MonthlyContributions(1925, 5, 0.01) },
{ new MonthlyContributions(2200, 5, 0.00) },
double monthlyContribution = 0;
double averageAnnualGrowth = 0.00;
double yearsOfContribution = 0;
double totalContribs = 0;
foreach (var contriStage in contributions) {
monthlyContribution = contriStage.Contribution;
yearsOfContribution = contriStage.Years;
averageAnnualGrowth = contriStage.AverageGrowth;
for (int year = 0; year < yearsOfContribution; year++)
if (year < yearsOfContribution)
for (int month = 0; month < 12; month++)
totalContribs += monthlyContribution;
balance += monthlyContribution - (monthlyContribution * contributionFee);
totalFees += monthlyContribution * contributionFee;
double annualGain = balance * averageAnnualGrowth;
totalFees += balance * managementFee;
balance -= balance * managementFee;
Console.WriteLine($"year {totalYears + 1} balance: {Math.Round(balance, 2, MidpointRounding.AwayFromZero):N0}");
Console.WriteLine($"total contributions: {Math.Round(totalContribs, 2, MidpointRounding.AwayFromZero):N0}");
Console.WriteLine($"total fees paid: {Math.Round(totalFees, 2, MidpointRounding.AwayFromZero):N0}");