Pagini recente » Cod sursa (job #211338) | Cod sursa (job #2370611) | Borderou de evaluare (job #171330) | Cod sursa (job #1969111) | Cod sursa (job #46875)
Cod sursa(job #46875)
#include <stdio.h>
#define NM 20
FILE *fin,*fout;
long saux,n,S,ok;
long long pas[NM][NM],sum[NM],rez[NM/2];
void genpas(long k)
{long i,j;
pas[1][1]=pas[2][1]=pas[2][2]=1;
for (i=3;i<=k;i++)
for (j=1;j<=i;j++)
pas[i][j]=pas[i-1][j]+pas[i-1][j-1];
}
void gensum (int k)
{long i,j,l;
for (i=1;i<=(((k-1)>>1)+1);i++)
{
for (j=1;j<=i;j++)
for (l=j;l<=(k+j-i);l++)
{
sum[i]+=pas[l][j];
//sum[k-i+1]=sum[i];
}
}
}
void back(int k)
{ if (k==((n-1)>>1)+2&&ok==0)
{ if (S==0)
{
scrie();
ok=1;
}
return ;
}
int i;
for (i=0;(S-sum[k]*i>=0)&&(ok==0);i++)
{ rez[k]=i;
S-=sum[k]*i;
back(k+1);
S+=sum[k]*i;
}
}
int main()
{
long i,j;
fin=fopen("triunghi.in","rt");
fout=fopen("triunghi.out","wt");
fscanf (fin,"%ld %ld\n",&n,&S);
genpas(n);
gensum(n);
back(1);
return 0;
}