28 Mart 2013 Perşembe

Thirty second solution pf Project Euler - Pandigital products







#include "stdafx.h"
#include <iostream>
#include<stdio.h>
#include <time.h>
using namespace std;





void make() {
int c,d,result=0,ch=0;
int control[20];
for(int i=1;i<2000;i++) {
for(int k=1;k<2000;k++){
if(i*k>9876) {
break;
}
int numbers[9]={1,2,3,4,5,6,7,8,9};
c=i;
bool efe=1,p=1;
do {

d=c%10;
if(d==0) {
efe=0;
break;
}
int counter=0;
for(int m=0;m<9;m++) {                     //check for same number
if(numbers[m] == d) {
counter++;
numbers[m] = 0;
}

}
if(counter ==0 ) {

efe=0;
break;
}
c/=10;
}while(c>0);
if(efe==0) {
continue;
}
c=k;
do {
d=c%10;
if(d==0) {
efe=0;
break;

}
int counter=0;
for(int m=0;m<9;m++) {
if(numbers[m] == d) {
counter++;
numbers[m] = 0;

}

}
if(counter ==0 ) {
efe=0;
break;
}
c/=10;
}while(c>0);
if(efe==0) {
continue;
}
c=i*k;
do {

d=c%10;
if(d==0) {
efe=0;
break;

}
int counter=0;
for(int m=0;m<9;m++) {
if(numbers[m] == d) {
counter++;
numbers[m] = 0;
}

}
if(counter ==0 ) {
          efe=0;
             break;
}
c/=10;
}while(c>0);
if(efe==0) {
  continue;
}
int res=0;
for(int n=0;n<9;n++) {
res+=numbers[n];
}
if(res==0) {
for(int f=0;f<ch;f++) {
if(control[f] == i*k) {
p=0;
break;

}
}
if(p==1) {
result+=i*k;
control[ch] = i*k;
ch++;
}

}

}
}

cout << "Project Euler - Problem 32(Pandigital products)\n";
  cout << "Result :" << result << " efekanpulatli.blogspot.com" << endl;
}


int main()
{

clock_t tStart = clock();
 make();
printf("Time taken: %.2fs\n", (double)(clock() - tStart)/CLOCKS_PER_SEC);
 system("pause");
return 0;
}

Hiç yorum yok:

Yorum Gönder