Cod sursa(job #291726)

Utilizator infooainfo oa infooa Data 30 martie 2009 11:44:03
Problema Loto Scor 5
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.18 kb
#include<iostream.h>
#include<stdio.h>
long long n,s,sum,i,j,nr[110],st[10],k,aux,ord,ok=1;
void init()
{
	st[k]=nr[1];
}
int succesor()
{
	if(st[k]<nr[n])
		for(i=1;i<=n;i++)
			if((nr[i]<=st[k])&&(st[k]<nr[i+1])) 
			{
				st[k]=nr[i+1];
				return 1;
			}
	return 0;
}
int solutie()
{
	sum=0;
	for(j=1;j<=6;j++)
		sum=sum+st[j];
	if(sum==s) return 1;
	return 0;
}
void tiparire()
{
	do
	{
		ord=1;
		for(i=1;i<6;i++)
			if(st[i]>st[i+1])
			{
				aux=st[i+1];
				st[i+1]=st[i];
				st[i]=aux;
				ord=0;
			}
	}while(ord==0);
	for(i=1;i<=6;i++)
		cout<<st[i]<<" ";
}
void loto()
{
	int as;
	for(k=1;k<=6;k++)
		init();
	if(solutie()) {tiparire(); ok=0; }
	k=1;
	as=succesor();
	while(as&&k<=6)
	{
		if(solutie()&&ok) {tiparire(); ok=0;}
		as=succesor();
		if(as==0)
		{
			k++;
			as=succesor();
		}
	}
	if(ok==1) cout<<"-1";
}
int main()
{
	freopen("loto.in","r",stdin);
	freopen("loto.out","w",stdout);
	cin>>n>>s;
	for(i=1;i<=n;i++)
		cin>>nr[i];
	do
	{
		ord=1;
		for(i=1;i<n;i++)
			if(nr[i]>nr[i+1])
			{
				aux=nr[i+1];
				nr[i+1]=nr[i];
				nr[i]=aux;
				ord=0;
			}
	}while(ord==0);
	loto();
	return 0;
}