幸运的袋子---递归
来源:互联网 发布:善领端口修改 编辑:程序博客网 时间:2024/04/28 01:22
一个袋子里面有n个球,每个球上面都有一个号码(拥有相同号码的球是无区别的)。
如果一个袋子是幸运的当且仅当所有球的号码的和大于所有球的号码的积。
例如:如果袋子里面的球的号码是{1, 1, 2, 3},这个袋子就是幸运的,因为1 + 1 + 2 + 3 > 1 * 1 * 2 * 3
你可以适当从袋子里移除一些球(可以移除0个,但是别移除完),要使移除后的袋子是幸运的。
现在让你编程计算一下你可以获得的多少种不同的幸运的袋子。
输入描述:
第一行输入一个正整数n(n ≤ 1000)
第二行为n个数正整数xi(xi ≤ 1000)
输出描述:
输出可以产生的幸运的袋子数
输入例子:
3
1 1 1
输出例子:
2
public class Main { public static void main(String[] args) { Scanner sc=new Scanner(System.in); int n=sc.nextInt(); int a[]=new int[n]; for(int i=0;i<n;i++){ a[i]=sc.nextInt(); } sc.close(); Arrays.sort(a);//从小到大排序,数越大,乘积和相加的差就越大 System.out.println(port(a,0,0,1)); } public static int port(int []a,int pos,int sum,int multi){ int cnt=0,len=a.length; for(int i=pos;i<len;i++){//以pos为起点的串 int tmp=a[i]; if(sum+tmp>multi*tmp){//和大于积,可以构成幸运的袋子 cnt+=1+port(a,i+1,sum+tmp,multi*tmp); }else{ if(tmp==1){//乘1对积没有影响,对和能增加,还有可能构成幸运的袋子 cnt+=port(a,i+1,sum+tmp,multi*tmp); }else{//往后都不可能构成幸运的袋子了,退出条件 break; } } while(i+1<len&&a[i+1]==a[i]){//拥有相同号码的球是无区别的 i++; } } return cnt; }}
阅读全文
0 0
- 幸运的袋子---递归
- 幸运的袋子
- 幸运的袋子
- 幸运的袋子
- 幸运的袋子
- 幸运的袋子
- 幸运的袋子
- 网易笔试题:幸运的袋子
- 网易笔试编程题-幸运的袋子
- dfs+避免重复-幸运的袋子(网易题)
- 2017网易内推笔试题---幸运的袋子
- 幸运的袋子问题(DFS+回溯+剪枝)
- 网易2017内推笔试2:幸运的袋子 [python]
- 网易2017内推笔试编程题合集(二)第二题 幸运的袋子
- 人生的四个袋子
- 网易2017内推笔试编程题合集(二)-幸运袋子
- 网易笔试题--幸运袋子(数列各项和大于数列各项乘积)
- 可怜的大袋子/无用之人
- FreeImage Convert Btween FIBITMAP and HBITMAP
- Java语言的5个特点,帮助新手了解Java
- QLineEdit和QListWidget组合成下拉菜单的知识点
- 系统学习TCP/IP协议
- Struts2类型转换器理解
- 幸运的袋子---递归
- Java代理模式
- 从软件工程的角度写机器学习7——-LSTM网络实现
- [PAT甲级]1014. Waiting in Line (30)(银行排队办理业务结束时间 队列的应用)
- Task Schedule HDU
- POJ3693 Maximum repetition substring (后缀数组)
- 设计模式的应用场景(14)--观察者模式
- Java面试题
- 2017/9/7随笔