Cod sursa(job #55756)

Utilizator alex_aurelia_31Neamtu Alexandra alex_aurelia_31 Data 28 aprilie 2007 13:01:12
Problema Loto Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.09 kb
#include<stdio.h>
FILE *f,*g;
int n,s,st[7],as,ev,v[10000],v1[7];
int nr,ok2=1;
void init(int k)
{
st[k]=0;
}
int succesor(int k)
{
if(st[k]<n)
{
st[k]++;
return 1;
}
else
return 0;
}
int validare(int k)
{
int i,suma=0;
for(i=1;i<=k;i++)
suma+=v[st[i]];
if(suma>s)
return 0;
return 1;
}
int solutie(int k)
{
int i,suma=0;
for(i=1;i<=k;i++)
suma+=v[st[i]];
return k==6;
}

void tipar(int k)
{
int i,suma=0;
for(i=1;i<=k;i++)
suma+=v[st[i]];
if(suma==s)
{
for(i=1;i<=k;i++)
v1[i]=v[st[i]];
}
}

void back(int k)
{
int i;
k=1;
init(k);
while(k>0)
{
do
{
as=succesor(k);
if(as)
ev=validare(k);
}
while((as==1)&&(ev==0));
if(as)
{
if(solutie(k))
tipar(k);
else
{
k++;
init(k);
}
}
else
k--;
}
}




int main()
{
f=fopen("loto.in","r");
g=fopen("loto.out","w");
fscanf(f,"%d %d",&n,&s);
int i,ok=1,j,x;
for(i=1;i<=n;i++)
{
fscanf(f,"%d",&x);
//for(j=1;j<=6;j++)
v[++nr]=x;
}
back(1);
for(i=1;i<=6;i++)
if(v1[i]==0)
ok=0;
if(ok==0)
fprintf(g,"-1");
else
{
for(i=6;i>=1;i--)
fprintf(g,"%d ",v1[i]);
}
fcloseall();
return 0;
}