using System.Threading.Tasks;
using System.Collections.Generic;
static float dailyPercentage = 0.0063f;
static float startDaily = 16.4f;
static float tvl = 2895.73f;
static float fee = 2.057f;
public static int Main() {
SplitAddendsAndCompare(20);
public static IEnumerable<int[]> SplitAddends(int n) {
for (int i = 1; i < n; i++) {
var part = SplitAddends(n - i);
foreach (var array in part) {
var newArray = new int[array.Length + 1];
Array.Copy(array, 0, newArray, 1, array.Length);
public static MaxMin SplitAddendsAndCompare(int n) {
MaxMin maxMin = new MaxMin();
maxMin.Min = float.MaxValue;
for (int i = 1; i < n; i++) {
var part = SplitAddends(n - i);
Parallel.ForEach (part, array => {
var newArray = new int[array.Length + 1];
Array.Copy(array, 0, newArray, 1, array.Length);
CalculateAndCompare( newArray,ref maxMin);
CalculateAndCompare( new []{n},ref maxMin);
public static void CalculateAndCompare(int[] sequence, ref MaxMin maxMin) {
foreach (var v in sequence) {
ctvl += CalculateCompoundAfter(ctvl, v);
maxMin.MaxArray = sequence;
maxMin.MinArray = sequence;
public static float CalculateCompoundAfter(float ctvl, int days) {
var earned = ctvl * dailyPercentage * days - fee;