全排列并清洗求解幸运的袋子问题 C++

该博客介绍了如何用C++解决一个算法问题:判断并生成幸运的袋子。一个幸运的袋子是指球的号码之和大于其乘积。问题涉及全排列计算,需要移除某些球以满足条件。博主通过样例解释和算法思路,讨论了如何计算可能的幸运组合,并强调了在处理排列和剔除重复数据时break和continue的使用技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

问题描述

一个袋子里面有n个球,每个球上面都有一个号码(拥有相同号码的球是无区别的)。如果一个袋子是幸运的当且仅当所有球的号码的和大于所有球的号码的积。
例如:如果袋子里面的球的号码是{1, 1, 2, 3},这个袋子就是幸运的,因为1 + 1 + 2 + 3 > 1 * 1 * 2 * 3
  你可以适当从袋子里移除一些球(可以移除0个,但是别移除完),要使移除后的袋子是幸运的。现在让你编程计算一下你可以获得的多少种不同的幸运的袋子。

输入描述

第1行输入一个正整数n(n ≤ 1000),第2行为n个数正整数xi(xi ≤ 1000)

输出描述

输出可以产生的幸运的袋子数

输入样例

样例1

3
1 1 1

样例2

3
1 2 1

输出样例

样例1

2

样例2

3
解释:三种情况分别为 1 2 1 ,1 2 ,1 1

算法思路

样例解释

不难看出
样例1:两种情况分别为 1 1 1 和 1 1。
样例2:1 2 1、 1 2 和 1 1
同一种情况下,数字顺序不产生影响例如 1 1 2 和 1 2 1视为一种情况

全排列,每次次数增加时刷新记录可以得出结果的数组。在往后的排列情况进行匹对。以便剔除在相同个数下情况相同的数据。在剔除个数之后进行重置记录数组,保证数据纯洁。
注意break和continue的使用

#include<iostream>
#include<algorithm>

using namespace std;

int array[1000];
int temparray[1000];
int tempn = 0;
bool judgearray[1000];
void emptyTemp(int n)
{
   
    for (int i = 0; i < n;++i)
    {
   
        temparray[i] = 0;
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

蒜蓉蒸大虾

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值