Pagini recente » Cod sursa (job #2112529) | Cod sursa (job #1736096) | Cod sursa (job #1849989) | Cod sursa (job #1788933) | Cod sursa (job #157974)
Cod sursa(job #157974)
/*Vultur este un veritabil colectionar de monezi si momentan colectia lui
numara N monezi cu valori numere naturale intre 1 si 50000.El vrea sa-si
cumpere insa un acvariu nou pentru pestii sai si de aceea se gandeste sa
cedeze la banca o parte din monezi.Fiind un tip sensibil,el ar dori sa
obtina folosind monezile care i-au ramas sa poata fi posibil sa obtina
orice valoare a monezilor din cele N sa poata fi scrisa ca o suma de
valori ale monezilor din subsetul ales(valoarea unei monezi din subsetul
ales sa poata fi adunata de mai multe ori).*/
unsigned v[1000],sol[1000],c[1000],aux;
int i,j,kmin=0,n,ok,sters[1000]={0};
#include<stdio.h>
FILE *f1,*f2;
int main()
{
f1=fopen("economie.in","r");
fscanf(f1,"%i",&n);
for(i=0;i<n;i++)
fscanf(f1,"%u",&v[i]);
fclose(f1);
do{
ok=0;
for(i=0;i<n-1;i++)
if (v[i]>v[i+1])
{ok=1;
aux=v[i];
v[i]=v[i+1];
v[i+1]=aux;}
}while(ok);
sol[kmin++]=v[0];
for(i=1;i<n;i++)
if(v[i]%v[0]==0) sters[i]=1;
for(i=0;i<n;i++)
{ //1
for(j=i+1;j<n;j++)
if (v[j]%v[i]==0)
sters[j]=1;
if(!sters[i])
{ //2
aux=v[i];
j=kmin-1;
do{ //3
for(;j>=0;j--)
{c[j]=aux/sol[j];
aux=aux%sol[j];}
if(aux==0)
sters[i]=1;
else{//4
aux=aux+c[0]*sol[0];
if(aux!=v[i])
{//5
j=1;
while((j<kmin-1)&&(c[j]==0))j++;
c[j]=c[j]-1;
aux=aux+sol[j];
j=j-1;
}//5
}//4
} //3
while((sters[i]==0)&&(aux!=v[i]));
if(sters[i]==0)
sol[kmin++]=v[i]; }
}//sf for i
f2=fopen("economie.out","w");
fprintf(f2,"%i\n",kmin);
for(i=0;i<kmin;i++)
fprintf(f2,"%u\n",sol[i]);
fclose(f1);
fclose(f2);
return 0;}