int Compare(const int* iLeftCombination,const int* iRightCombination,const int* iStampValue,const int iStampTypeNum)
{
	if(TypeCount(iLeftCombination,iStampTypeNum)!=TypeCount(iRightCombination,iStampTypeNum))
		return TypeCount(iLeftCombination,iStampTypeNum)-TypeCount(iRightCombination,iStampTypeNum);
	if(StampCount(iLeftCombination,iStampTypeNum)!=StampCount(iRightCombination,iStampTypeNum))
		return StampCount(iRightCombination,iStampTypeNum)-StampCount(iLeftCombination,iStampTypeNum);
	if(HighestValue(iLeftCombination,iStampValue,iStampTypeNum)!=HighestValue(iRightCombination,iStampValue,iStampTypeNum))
		return HighestValue(iLeftCombination,iStampValue,iStampTypeNum)-HighestValue(iRightCombination,iStampValue,iStampTypeNum);
	return 0;
}
示例#2
0
 //
 // HaveType::Test
 //
 Bool HaveType::Test(Team *team)
 {
   // Has a relation been specified
   if (relation)
   {
     if (combine)
     {
       U32 count = 0;
       for (List<Team>::Iterator t(&team->RelatedTeams(relation->relation)); *t; t++)
       {
         count += TypeCount(*t);
       }
       return (type->oper(count, type->amount));
     }
     else
     {
       for (List<Team>::Iterator t(&team->RelatedTeams(relation->relation)); *t; t++)
       {
         if (TypeTest(*t))
         {
           return (TRUE);
         }
       }
     }  
     return (FALSE);
   }
   else
   {
     // Do we have enough of this type ?
     return (TypeTest(team));
   }
 }
void main()
{
	int iStampValue[30],iStampTypeNum,iRequest,iTry[4],iCurrentState,iCombination[4],i;
	while(cin>>iStampValue[0])
	{
		iStampTypeNum=0;
		while(iStampValue[iStampTypeNum]!=0)
			cin>>iStampValue[++iStampTypeNum];
		iStampValue[iStampTypeNum]=0;
		while(cin>>iRequest)
		{
			iCurrentState=NONE;
			if(iRequest==0)
				break;
			for(iTry[0]=0;iTry[0]<=iStampTypeNum;iTry[0]++)
				for(iTry[1]=iTry[0];iTry[1]<=iStampTypeNum;iTry[1]++)
					for(iTry[2]=iTry[1];iTry[2]<=iStampTypeNum;iTry[2]++)
						for(iTry[3]=iTry[2];iTry[3]<=iStampTypeNum;iTry[3]++)
						{
							if(iStampValue[iTry[0]]+iStampValue[iTry[1]]+iStampValue[iTry[2]]+iStampValue[iTry[3]]!=iRequest)
								continue;
							if(iCurrentState==NONE || Compare(iTry,iCombination,iStampValue,iStampTypeNum)>0)
							{
								iCurrentState=BEST;
								memcpy(iCombination,iTry,sizeof(iCombination));
							}
							else if(Compare(iTry,iCombination,iStampValue,iStampTypeNum)==0)
								iCurrentState=TIE;
						}
			cout<<iRequest<<" ";
			if(iCurrentState==NONE)
				cout<<"---- none"<<endl;
			else
			{
				cout<<"("<<TypeCount(iCombination,iStampTypeNum)<<"): ";
				if(iCurrentState==TIE)
					cout<<"tie";
				else
					for(i=0;i<4;i++)
						if(iCombination[i]!=iStampTypeNum)
							cout<<iStampValue[iCombination[i]]<<" ";
				cout<<endl;
			}
		}
	}
}
示例#4
0
 //
 // TypeCondition::TypeTest
 //
 Bool TypeCondition::TypeTest(Team *team)
 {
   return (type->oper(TypeCount(team), type->amount));
 }