【问题标题】:wrong output on printing subsets of array [closed]打印数组子集时输出错误[关闭]
【发布时间】:2021-03-09 00:00:24
【问题描述】:

我正在尝试打印数组的所有子集。但没有得到正确的输出。

#include<iostream>
using namespace std;

int arr[]={1,2,3,4,5};
int n=5;

void print(int a[],int cnt, int idx)
{
    if(idx==n)
    {
        for(int i=0;i<cnt;i++)
        {
            cout<<a[i]<<" ";
        }
        cout<<endl;
        return;
    }
    a[cnt]=arr[idx];
    print(a,cnt,idx+1);
    print(a,cnt+1,idx+1);
}
int main()
{
    int a[5]={0};
    print(a,0,0);
}

上面的代码只打印“5” 请帮我改正。

【问题讨论】:

  • print 函数通常不会修改它正在打印的内容。在你的打印函数中修改a的目的是什么?
  • a 将存储数组 arr 的值。
  • 你可能对Powerset section of my answer感兴趣。

标签: c++ algorithm recursion


【解决方案1】:

用向量替换数组。由于C++中的数组是通过引用传递的,所以打印函数访问的是同一个数组,导致问题。

#include <iostream>
#include<vector>
using namespace std;
int arr[]={1,2,3,4,5};
int n=5;

void print(vector<int>a,int cnt, int idx)
{
    if(idx==n)
    {
        for(int i=0;i<cnt;i++)
        {
            cout<<a[i]<<" ";
        }
        cout<<endl;
        return;
    }
    a[cnt]=arr[idx];
    print(a,cnt,idx+1);
    print(a,cnt+1,idx+1);
}
int main()
{
    vector<int >a(5,0);
    print(a,0,0);
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-11
    • 2018-09-30
    • 2017-01-20
    • 2015-12-02
    相关资源
    最近更新 更多