文章目录

  • 问题描述
  • 输入描述
  • 输出描述
  • 输入样例
    • 样例1
    • 样例2
  • 输出样例
    • 样例1
    • 样例2
  • 算法思路
    • 样例解释

问题描述

一个袋子里面有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;}
}void judgeEmpty(int n)
{for (int i = 0; i < n;++i){judgearray[i] = 0;}
}bool judgeArray(int n)
{for (int i = 0; i < n;++i){if(judgearray[i] == 0){return false;}}return true;
}
void solve(int n)
{sort(array, array + n);int ans = 0;for (int i = n - 1; i >= 1;--i){do{if(tempn==i)//和上一个结果数字数量相等{for (int j = i; j >= 0;--j){for (int k = i; k >= 0;--k){if(array[j] == temparray[k] && judgearray[k] == 0){judgearray[k] = 1;break;}}}if(judgeArray(i)){// cout << "repeatition: "  ; //输出检测到的重复数据// for (int j = i; j >= 0;--j)// {//     cout << array[j] << " ";// }// cout << endl;judgeEmpty(i);continue;//不是用break,break直接进行剔除减少,此层不再进行排列}}int sum = 0; //记录加法数据int xsum = 1;//记录乘法法数据for (int j = i; j >= 0;--j){sum += array[j];xsum *= array[j];}if (sum > xsum){ans++;for (int j = i; j >= 0;--j) //记录标记数组剔除重复数据{temparray[j] = array[j];}tempn = i;// for (int j = i; j >= 0; --j)//输出当前结果// {//     cout << array[j] << " ";// }// cout << endl;}} while (next_permutation(array, array + n));emptyTemp(i);//清空当前标记数组}cout << ans << endl;
}
int main()
{int n;cin >> n;for (int i = 0; i < n;++i){cin >> array[i];}solve(n);
}

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

  1. 2017校招真题在线编程-幸运的袋子

    题目描述 一个袋子里面有n个球,每个球上面都有一个号码(拥有相同号码的球是无区别的).如果一个袋子是幸运的当且仅当所有球的号码的和大于所有球的号码的积. 例如:如果袋子里面的球的号码是{1, 1, 2 ...

  2. 回溯算法之幸运的袋子

    解法框架 [README]回溯算法基本框架 幸运的袋子(点击跳转) 这道题基本也是回溯,题解中有一部分提到了dfs,其实dfs本质也是回溯算法.这道题有点特别,除了考察算法外,还轻微涉及一点数学知识, ...

  3. ch2_8_2求解幸运数问题

    思路:f(x)进行十进制每位相加,g(x)进行二进制每位相加,比较是否相等即可. 小明同学学习了不同的进制之后,拿起了一些数字做起了游戏.小明同学知道,在日常生活中我们最常用的是十进制数,而在计算机中 ...

  4. bad lucky :幸运的袋子

    题目: 一个袋子里面有n个球,每个球上面都有一个号码(拥有相同号码的球是无区别的).如果一个袋子是幸运的当且仅当所有球的号码的和大于所有球的号码的积. 例如:如果袋子里面的球的号码是{1, 1, 2, ...

  5. 【Java版oj】day14计算日期到天数转换、幸运的袋子

    目录 一.计算日期到天数转换 (1)原题再现 (2)问题分析 (3)完整代码 二.幸运的袋子 (1)原题再现 (2)问题分析 (3)完整代码 一.计算日期到天数转换 (1)原题再现 计算日期到天数转换 ...

  6. java 行列式计算_n阶行列式的全排列求解(Java)

    上一个随笔,我介绍了全排列的递归求解,其中还有排列的逆序数等代码,这次我来介绍如何使用全排列计算行列式的值. 使用全排列求行列式的值,简单的描述就是: 对这个行列式每一行选取一个数,这些数处于行列式的 ...

  7. c语言六角填数蓝桥杯答案,六角填数(全排列)蓝桥杯真题

    六角填数(全排列)蓝桥杯真题 六角填数(全排列)蓝桥杯真题 如图所示六角形中填入1-12的数字,使每条直线上的数字和相等,图中已经填好了3个数字,请你计算*号数字是多少 蓝桥杯老套路,经常这样考全排列 ...

  8. n皇后问题的子集树求解与排列树求解

    在n×n棋盘上放彼此不受攻击的n个皇后. 按国际象棋规则,皇后可攻击同行.同列.同一斜线的棋子. 等价于在n×n格的棋盘上放置n个皇后,任何2个皇后不放在同一行或同一列或同一斜线上. 可以用一个数组存 ...

  9. 【每日一题】成长必刷题

    文章目录 1.组队竞赛(贪心) 2.删除公共字符(hash) 3.排序子序列(干就完了) 4.倒置字符串(双指针切片) 5.字符串中找出连续最长的数字串(dp) 6.数组中出现次数超过一半的数字(dp ...

最新文章

  1. CentOS 6虚拟机安装
  2. MySQL-锁表处理
  3. 结对项目之需求分析与原型模型设计
  4. 百度希壤元宇宙平台上线首个汽车数字展厅 领克探索汽车营销新方式
  5. 数据结构算法模拟系统
  6. java 获取继承字段_java – 从类中获取所有字段(甚至是私有的和继承的)
  7. 【openjudge】【字符串+模拟】1777:文件结构“图”
  8. Android studio Mac 版上传代码提示The subversion command line tools are no longer provided by Xcode
  9. linux命令(一)查看进程的线程数top,ps
  10. 杀死系统中的进程kill和killall命令
  11. iOS比较当前日期与指定日期大小
  12. Lodop6.226_Clodop3.075.zip
  13. (高级)Matlab绘制中国地图超全教程详解
  14. 总结:硬盘随机读写与顺序读写的性能差异
  15. 7-2 古风排版 C语言
  16. c#中regex的命名空间_C# Regex类用法
  17. java里面不等于怎么打_不等于在c语言中怎么打
  18. 我做的一个Android 下的PDF书架阅读APP
  19. 3D数学——法线变换
  20. BZOJ 4399: 魔法少女LJJ

热门文章

  1. 小寒也会写程序(五)
  2. 7.4 一阶线性微分方程
  3. R语言安装ggcor包
  4. 河南理工大学 计算机 研究生就业,河南理工大学好就业吗?附河南理工大学就业率最高的专业名单...
  5. 有CCC认证是不是代表产品的质量好?
  6. ajax向后台传中文乱码问题
  7. 计算机Excel怎么弄迷你图,教大家excel2016怎么添加迷你图
  8. mysql workbench安装教程_MySql可视化工具MySQL Workbench使用教程
  9. 三个变量存在一个协整方程_计量经济学最基本的31个问题
  10. GoogleEarth--全球卫星地图浏览