首页 > 解决方案 > 如何根据计数器缩放值

问题描述

我有五个整数值

std::vector<int> vec(5, 0);

每个 int 的值将基于一个计数器。

如果计数器为 0,则所有整数都为 0

如果计数器为 100,则所有整数的值为 20

所以当计数器为 20 时,第一个 int 的值为 20,其余为 0。

当计数器为 30 时,第一个 int 为 20,第二个 int 为 10

这是我的代码,我有兴趣看到其他逻辑来实现这一点,

std::vector<int> vec(5, 0);
    int counter = 50;
    for (int i = 0; i < 5; i++)
    {
        int startValue = (i) * 20;
        int finalValue = counter - startValue;

        if (finalValue > 20)
            finalValue = 20;

        if (finalValue < 0)
            finalValue = 0;

        vec[i] = finalValue;
    }


    for (auto &v : vec)
    {
        std::cout << v << std::endl;
    }

标签: c++c++11

解决方案


另一种方法是预先计算要设置多少个元素20以及为下一个元素留下什么,然后将其他元素保留在0.

    const int maxValue = 20;
    int fullCells = counter / maxValue;
    int lastValue = counter % maxValue; 

    for (int i = 0; i < fullCells; i++)
    {   vec[i] = maxValue; }
    if (lastValue)
    {   vec[fullCells] = lastValue; }

推荐阅读