Cod sursa(job #109884)

Utilizator bacerandreiBacer Andrei bacerandrei Data 25 noiembrie 2007 12:53:00
Problema Economie Scor 0
Compilator cpp Status done
Runda preONI 2008, Runda 1, Clasa a 9-a Marime 1.34 kb
#include<fstream.h>
long long n,a[1000],i,b[1000],x,j,k,t,v,gasit,c[1000],o;

void quik(long long p,long long q)
{
  long long aux,i,j,t;
   if(p<q)
    {
     i=p;
     j=q;
     t=1;
      do
       {
	if(a[i]>a[j])
	 {
	  aux=a[i];
	  a[i]=a[j];
	  a[j]=aux;
	  t=!t;
	 }
       if(t)
	j--;
       else
	i++;
     }while(i!=j);
    quik(p,i-1);
    quik(i+1,q);
  }
}

int main()
{
  ifstream f("economie.in");
  ofstream g("economie.out");
   f>>n;
  for(i=1;i<=n;i++)
   f>>a[i];
  quik(1,n);
  i=n;
   while(i>1)
   {
   gasit=1;
   v=0;
   j=1;
    if(a[i]%a[1]==0)
     {

	 b[k]=a[1];
	 k++;
	 gasit=0;
	 v=1;
      }
     else
     {
      j=2;
      while(gasit==1)
       {
	 if(a[i]%a[j]==0)
	 {
	  gasit=0;
	  v=1;
	 }
       else
	{
	 a[i]=a[i]/a[j];
	  for(int t=j-1;t>=1;t--)
	  {
	   if(a[i]%a[t]==0)
	    {
	     gasit=0;
	     v=1;
	    }
	   else
	    a[i]=a[i]/a[t];
	   }
	  }
	 j++;
	if(j==n-1)
	 gasit=0;
       }
      }
      if(gasit==0&&v==1)
       for(t=1;i<=j;i++)
	{
	 b[k]=a[i];
	 k++;
	}
     i--;
    }
       for(i=0;i<k;i++)
	{
	gasit=0;
	 for(j=0;j<o;j++)
	  if(b[i]==c[j])
	   gasit=1;
	  if(gasit==0)
	   {
	    c[o]=b[i];
	    o++;
	   }
	 }
       g<<o<<"\n";
      for(i=0;i<o;i++)
       g<<c[i]<<"\n";
     return 0;
  }