求集合的幂集

10 篇文章 0 订阅
3 篇文章 0 订阅

这是朋友叫我帮他写的,足足干了两天,终于在养好精神后把它做出来了,虽然是递归实现的,但总算是弄出来了,两天时间里搞了好多遍循环来实现,但是写着写着就迷糊了,洗了个头,刷了把脸,人精神了,换了递归刺溜一下就写出来了,手动开心 哈哈哈哈。

但是据说还可以用分治法、回溯法、穷举法来实现哦

#include<stdio.h>
#include<iostream>
using namespace std;


void func(int index, int arr[], int len1, int buffer[],int len2) {
    for (int i = index; i < len1; i++) {//让每个数都能和上一次的记录进行配合,注意起始位置,起始位置是从上一次记录末尾的后一位开始的。
        printf("{");
        for (int j = 0; j < len2; j++) {//先输出上一次的记录
            printf("%d,", buffer[j]);
        }
        printf("%d}", arr[i]);//输出新增加的数
        buffer[len2] = arr[i];//把新增加的数加到记录里方便下次输出
        if (i + 1 < len1 ) func(i + 1, arr, len1, buffer,len2+1);//函数递归,传递记录,让这次的记录和下次的新增加的数一起输出。
    }
}


int main() {
    const int len1 = 4;//原始数组大小
    int arr[len1] = { 1,2,3,4 };//原始数组
    int buffer[len1]; //用来记录上一次的输出记录例如{1,2,3} 他的上一次记录为{1,2}
    int len2 = 0;//用来记录buffer的大小
    int index = 0;
    func(index, arr, len1, buffer,len2);
    return 0;
}

输出结果
{1}{1,2}{1,2,3}{1,2,3,4}{1,2,4}{1,3}{1,3,4}{1,4}{2}{2,3}{2,3,4}{2,4}{3}{3,4}{4}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值