//--------------------------------------------------------------------------- #include #pragma hdrstop #include "Unit1.h" //--------------------------------------------------------------------------- #pragma resource "*.dfm" TForm1 *Form1; //--------------------------------------------------------------------------- __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { } //--------------------------------------------------------------------------- void TForm1::main() { char *stime[30],*etime[30]; __int64 tick1,tick2; tick1 = GetTickCount(); Form1->Cursor = crHourGlass; fid = fopen("log.txt","wt"); time(&t1); *stime = ctime(&t1); fprintf(fid,"*** pazul started : %s \n",*stime); Edit1->Text = *stime; Edit3->Text = IntToStr(time(&t2)-t1); Form1->Refresh(); exec(); tick2 = GetTickCount(); result = (int) (tick2 -tick1); time(&t2); *etime = ctime(&t2); fprintf(fid,"\n*** pazul ended time = %d ms : %s \n",result,*etime); Edit2->Text = *etime; Edit3->Text = IntToStr(t2-t1); Edit4->Text = IntToStr(result); fclose(fid); // reset cursor mark Form1->Cursor = crDefault; } //--------------------------------------------------------------------------- void TForm1::exec() { short k,n; for (N=2; N<=30; N++) { for (A=1; A<=N/2; A++) { B = N - A*2; xnum[0] = 8; select(0); } } } //--------------------------------------------------------------------------- void TForm1::select(int m) { int i,j,k,n,d,w,bollow; if (m == A) { for (k=A+1; k<=A+B; k++) xnum[k] = 9; for (k=1; k<=A; k++) xnum[N-k+1] = 9 - xnum[k]; xnum[A]--; xnum[N]++; for (n=0; n<=9; n++) digit[n] = 0; for (k=1; k<=N; k++) digit[xnum[k]]++; n = 0; for (d=1; d<=9; d++) for (k=1; k<=digit[d]; k++) onum[++n] = d; if (n != N) { fprintf(fid,"++++bugbugbug+++\n"); fflush(fid); } // printR("*** original : ",xnum); //sort // for (k=1; k<=N; k++) { onum[k] = xnum[k]; } // for (i=1; i onum[j]) { // w = onum[i]; // onum[i] = onum[j]; // onum[j] = w; // } // } // printR("*** sorted : ",onum); //check bollow = 0; for (k=1; k<=N; k++) { if (onum[k] < onum[N-k+1] + bollow) { if (xnum[N-k+1] != (10+onum[k]-onum[N-k+1]-bollow)) break; bollow = 1; } else { if (xnum[N-k+1] != (onum[k]-onum[N-k+1]-bollow)) break; bollow = 0; } } if (k > N) { fprintf(fid,"\n***** Lucky !!!! N=%2d *****\n",N); printR("org ",xnum); printR("min ",onum); for (k=1; k<=N; k++) num[k] = onum[N-k+1]; printR("max ",num); } exit: xnum[A]++; xnum[N]--; return; } for (k=2; k<=xnum[m]; k++) { xnum[m+1] = k; select(m+1); } } //--------------------------------------------------------------------------- void TForm1::printR(char id[],int num[]) { int k; fprintf(fid,"%s",id); for (k=1; k<=N; k++) fprintf(fid," %d",num[k]); fprintf(fid,"\n"); fflush(fid); } //--------------------------------------------------------------------------- void __fastcall TForm1::FormClick(TObject *Sender) { main(); } //---------------------------------------------------------------------------