Cod sursa(job #270694)

Utilizator Cristy94Buleandra Cristian Cristy94 Data 4 martie 2009 13:29:39
Problema A+B Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.05 kb
#include<fstream.h>
ifstream f("circular.in");
ofstream g("circular.out");
long i,k,n,x[10],viz1[10],nr,b,max,w,t;

int circular(int k){
int i,n,p,viz[9];b=0;
for(i=1;i<=k;i++){
  viz[i]=0;
  b=b*10+x[i];
  }
if(b> t) return 0;
for(i=k+1;i<=9;i++) viz[i]=0;

 i=1;p=1;viz[1]=1;

   while(i<k){
     n=x[p];
       if ((p+n)%k!=0)
	   p=(p+n)%k;
       else p=k;
	viz[p]++;i++;
  }
	n=x[p];
	if ((p+n)%k!=0)
	   p=(p+n)%k;
       else p=k;
     if(x[p]==x[1]){
       for(i=1;i<=k;i++)
	 if(viz[i]!=1)
	  return 0;
       return 1; }
    return 0;
    }

int main(){
f>>n;t=n;
   w=n;
for(i=0;w!=0;i++)
       w=w/10;
w=i;

for(i=1;i<=9;i++)
   viz1[i]=0;
k=1; x[k]=0;
 while(k>0)
  if(x[k]<9)
   { x[k]=x[k]+1;
     if(viz1[x[k]]==0)
       {
	 viz1[x[k]]=1;
	if(circular(k)==1)
	   { nr++;if(b>max)max=b;

	      }
       if(k<w)
	 { k++;x[k]=0;}
       else viz1[x[k]]=0;
	}

    }
   else {

	  k--;
	viz1[x[k]]=0;
	 }
if(nr>9)
g<<nr-9<<' '<<max;
else g<<0<<' '<<0;
//cout<<circular(1);
return 0;}