Проценты от процента

Рейтинг: -1Ответов: 1Опубликовано: 27.06.2023

Есть 5 значений:

{1, 20.0%}
{2, 20.0%}
{3, 20.0%}
{4, 20.0%}
{5, 20.0%}

В сумме всегда должно быть 100.0%

Есть переменная в процентах - 41.0%

Нужно прибавить к значению 1, процент переменной от процента значения 1, к значению 1 и высчитать из остальных четырех значений в равной степени, что бы в сумме осталось 100.0%

Простой пример:

переменная 20

1 - 50
2 - 50

вычитаем из первого значения переменную и прибавляем к второму значению.

Получаем -

1 - 30
2 - 70

Как это сделать ?

static void Main(string[] args)
{
    Dictionary<int, double> result = new();

    Dictionary<int, double> dict = new Dictionary<int, double>
    {
        { 0, 15 },
        { 1, 15 },
        { 2, 8  },
        { 3, 10 },
        { 4, 52 }
    };

    double total = 0;

    double x = 41d;
    double t = x / 4d;

    foreach (var d in dict)
    {
        if (d.Key == 0)
        {
            double value = d.Value + (d.Value * x / 100);
            result.Add(0, value);
        }
        if (d.Key == 1)
        {
            double value = d.Value - (d.Value * t / 100);
            result.Add(1, value);
        }
        if (d.Key == 2)
        {
            double value = d.Value - (d.Value * t / 100);
            result.Add(2, value);
        }
        if (d.Key == 3)
        {
            double value = d.Value - (d.Value * t / 100);
            result.Add(3, value);
        }
        if (d.Key == 4)
        {
            double value = d.Value - (d.Value * t / 100);
            result.Add(4, value);
        }
    }

    foreach (var r in result)
    {
        total += r.Value;
        Console.WriteLine($"{r.Key}  {r.Value}");
    }

    Console.WriteLine($"Total - {total}");
    Console.ReadLine();
}
0  21,15
1  13,4625
2  7,18
3  8,975
4  46,67
Total - 97,4375

Ответы

▲ 0

Вы в последнем комментарии всё правильно написали, осталось только это запрограммировать:

using System;
using System.Collections.Generic;
namespace NsPercents {
    class Percents {
        static void Main() {

            var result = new Dictionary<int, double>();

            var dict = new Dictionary<int, double>
            {
                { 0, 15 },
                { 1, 15 },
                { 2, 8  },
                { 3, 10 },
                { 4, 52 }
            };

            double total = 0;

            double x = 41;
            double t = 0;

            foreach (var d in dict)
            {
                if (d.Key == 0)
                {
                    t = d.Value * x / 100;
                    double value = d.Value + t;
                    result.Add(0, value);
                }
                if (d.Key == 1)
                {
                    double value = d.Value - t / 4;
                    result.Add(1, value);
                }
                if (d.Key == 2)
                {
                    double value = d.Value - t / 4;
                    result.Add(2, value);
                }
                if (d.Key == 3)
                {
                    double value = d.Value - t / 4;
                    result.Add(3, value);
                }
                if (d.Key == 4)
                {
                    double value = d.Value - t / 4;
                    result.Add(4, value);
                }
            }

            foreach (var r in result)
            {
                total += r.Value;
                Console.WriteLine("{0}  {1}", r.Key, r.Value);
            }

            Console.WriteLine("Total - {0}", total);
            Console.ReadLine();
        }
    }
}

0 21,15

1 13,4625

2 6,4625

3 8,4625

4 50,4625

Total - 100

И немного улучшить:

using System;
using System.Collections.Generic;
namespace NsPercents {
    class Percents {
        static void Main() {
            var dict = new double[5] { 15, 15, 8, 10, 52 };
            var result = new double[5];
            double x = 41;
            double t = dict[0] * x / 100, total = result[0] = dict[0] + t;
            t /= 4;
            for (int i = 1; i < 5; i++) total += result[i] = dict[i] - t;
            for (int i = 0; i < 5; i++) Console.WriteLine("{0}  {1}", i, result[i]);
            Console.WriteLine("Total - {0}", total);
            Console.ReadLine();
        }
    }
}

Нужно было бы проверять, что в результате доля не становится отрицательной.