分组问题 c++ 递归

题目要求将整数数组分为两组,使得两组元素之和相等,其中5的倍数在一组,3的倍数在另一组(不包括5的倍数)。通过递归方法,判断是否存在这样的分组。当数组数值处理完后,若两组和的绝对值为0,则返回true,否则返回false。递归过程中考虑数值的正负,确保正确分组。
摘要由CSDN通过智能技术生成

题目描述
编写一个函数,传入一个int型数组,返回该数组能否分成两组,使得两组中各元素加起来的和相等,并且,所有5的倍数必须在其中一个组中,所有3的倍数在另一个组中(不包括5的倍数),能满足以上条件,返回true;不满足时返回false。

输入
第一行是数据个数,第二行是输入的数据
输出
返回true或者false

输入范例
4
1 5 -5 1
输出范例
true

思路
本题初步理解为两组互相影响的递归,可以通过他们之间的联系将其转换为一组递归。
需要两组数和相等,可以理解为差为0.
往两组数中添加元素就是在他们之间的绝对值上增减。如果数值添加完毕后两组数距离为0,即可判定存在分组满足条件。

牛客网上还有dfs的方法,以后再讨论。

#include<iostream>
#include<vector>
#include<math.h>
using namespace std;

int sum5;
int sum3;
int dis0;
vector<int
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值