问题描述
一个袋子里面有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;
}
}