文章目录

  • 问题描述
  • 输入描述
  • 输出描述
  • 输入样例
    • 样例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. Python中常见字符串去除空格的方法总结
  2. AI一分钟 | 特斯拉做空者频频“找茬”;自动驾驶汽车事故调查:人为是主因...
  3. java线程排序_Java中的并发排序
  4. 兰州现超级“牛大”碗比腰粗:牛肉面吃出火锅范
  5. 云计算学习(4-1)虚拟化技术
  6. VUE -- Mac上解决Chrome浏览器跨域问题
  7. 几个面试官常问的垃圾回收器,下次面试就拿这篇文章怼回去!
  8. abstract类和接口interface的联系和区别
  9. Asterisk权威指南/第五章 用户设备配置
  10. hive sql 怎么实现循环_Hive存储过程实现-hpsql
  11. 获取SD卡中的音乐文件
  12. Raid技术精简总结
  13. linux 文件 16进制显示,linux 16进制 产看文件
  14. [链表遍历|模拟] leetcode 2 两数相加
  15. 「刷新 CTO」微软与 CSDN 的 CTO 转型思想汇
  16. matlab 隐函数求偏导数,隐函数求偏导数的方法.PDF
  17. 秋天远程控制V1.0源码(易语言)
  18. 微服务踩坑记之Zuul注册到Eureka
  19. JQury实现ajax异步请求
  20. python plot坐标轴显示比例一致_绘图,x轴和y轴的比例相同

热门文章

  1. 一分钟了解阿里云产品:万网虚拟主机如何正确绑定域名
  2. java练习题(set集合)
  3. windows7 设置png格式图片为桌面壁纸
  4. 暴雪hash java_暴雪招聘:Java与C++工程师 暴雪总部图赏
  5. php pdo oracle 乱码,php pdo 乱码怎么办
  6. Key Points on Innovation from Peter Drucker
  7. Cocos2d-X资源网站索引
  8. [DR吐槽]——三大卡牌链游到底都是什么货色?
  9. 网页端 vue项目 css美化右侧 Y轴滚动条
  10. offer_II_109开密码锁