http://www.javaeye.com/topic/88204
- package com.maodajun.javaeye1;
- import java.util.ArrayList;
- import java.util.Iterator;
- import java.util.List;
- public class BaiDuQuest {
- public String teamAndImpossable(int peoples,int impossable){
- int maximpossable= maxImpossable(peoples);
- maximpossable -=impossable;
- List list =selfTeam(peoples,maximpossable,new ArrayList());
- if(list!=null){
- return "YES";
- }
- return "NO";
- }
- //递归算出最大可能。。。循环赛制
- public int maxImpossable(int poples){
- if(poples==2){
- return 1;
- }else if(poples<1){
- return 0;
- }
- poples--;
- return maxImpossable(poples)+poples;
- }
- public int maxFirstTeam(int peoples, int maximpossable){
- int tmp = 0 ;
- if(maxImpossable(peoples)
- return -1;
- }
- for(int i = peoples ; i >1 ; i--){
- tmp = maxImpossable(i);
- if(tmp <= maximpossable){
- return i;
- }
- }
- return tmp;
- }
- public List selfTeam(int peoples , int maximpossable ,List list ){
- int max = maxFirstTeam(peoples,maximpossable);
- if(max==0){
- return list;
- }else if (max==-1){
- return null;
- }else{
- list .add(""+max);
- return selfTeam(peoples-max,maximpossable-maxImpossable(max),list);
- }
- }
- public static void main(String[] arg){
- BaiDuQuest quest = new BaiDuQuest();
- int people = 5;
- for(int i = quest.maxImpossable(people) ; i >=0; i--){
- List list =quest.selfTeam(people,i,new ArrayList());
- int count = 0 ;
- if(list!=null){
- for(int j = 0 ; j < list.size(); j ++){
- count +=Integer.parseInt(list.get(j).toString());
- }
- list.add(""+(people-count));
- }
- System.out.println(quest.maxImpossable(people)-i+":"+list);
- }
- }
- }