如何用C ++从数字列表中生成3位数字?

时间:2019-05-23 07:43:08

标签: c++ arrays numbers generate

我是一名新程序员,并且想从数字列表(2,5,8)中生成具有3位数字的数字数组。我已经创建了一个代码,但是输出不是我的预期结果。这是我的简单代码:

%thread

我预期的结果是222,555和888,但实际输出是222,55005和8800008。

4 个答案:

答案 0 :(得分:4)

可能会有所帮助。您忘记重置times变量

int main()
{
    int arr[3]={2,5,8};

    int d=3;
    int times=1;

    for (int a:arr){
        int sum = a;
        for (int i=1; i<d; i++){
            times *= 10;
            sum += a*times;
        }
        cout<<sum<<endl;
        times = 1;   //<---added
        sum=0;
    }
    return 0;
}

答案 1 :(得分:3)

要使当前代码生成222、555、888,您忘记重新初始化times

您可能已经创建了一个用于澄清的子功能:

int mul_by_111(int n) // { return 111 * n; }
{
    int sum = a;
    int times = 1;
    for (int i = 1; i < 3; ++i) {
        times *= 10;
        sum += a * times;
    }
    return sum;
}

int main()
{
    int arr[] = {2, 5, 8};
    for (int a:arr){
        std::cout << mul_by_111(a) << std::endl;
    }
}

如果您希望笛卡尔积显示222、225、228、522,..,888

您可能(天真的)通过3个循环来完成此操作:

int main()
{
    int arr[] = {2, 5, 8};
    for (int a:arr){
        for (int b:arr){
            for (int c:arr){
                std::cout << a << b << c << std::endl;
            }
        }
    }
}

range-v3的某些库建议使用cartesian_product来简化操作:

for (auto t : ranges::view::cartesian_product(arr, arr, arr)) {
    std::cout << std::get<0>(t) << std::get<1>(t) << std::get<2>(t) << std::endl;
    // std::apply([](auto... args){ (std::cout << ... << args) << std::endl; }, t); // C++17
}

答案 2 :(得分:0)

使用router.push({ path: this.$route.query.redirectTo }) 变得微不足道:

<form v-on:submit.prevent ...

更新

要使置换成为算法的一部分,您可以使用std::next_permutation

std::stringstream

答案 3 :(得分:0)

问题在于变量的范围。只需将它们放在块中即可,一切都很好:

int main()
{
    int arr[3]={2,5,8};

    int d=3;

    for (int a:arr){
        int sum = a;
        int times=1;
        for (int i=1; i<d; i++){
             times *= 10;
             sum += a*times;
        }
        cout<<sum<<endl;
    }
    return 0;
}

变量sum和time将在阻止时初始化。无需重置它们。