#include#include #include using namespace std; int main() { int n; cin >> n; int v[]={1,3,9,27,81,43,29,87,61,83,49,47,41,23,69,7,21,63,89,67}; for(int i =0;i > num; int c = 0; int indice = 0; for (int j = num.size ()-1; j >= 0;j--) { c = c + v[indice]*((int)num[j]-48); indice ++; if(indice==19) indice =0; } if ( c % 4 ==0) cout << "YES"<< endl; else cout <<"NO" << endl; } }
sábado, 28 de abril de 2012
Coj - 1259
bueno al fin se me ocurrio la solucion de este problema
miércoles, 25 de abril de 2012
TSHOW2
Luego de investigar como loco Sucesión de Fibonacci encontre en esta parte algo muy interesante Propiedades de la sucesión
El último dígito de cada número se repite periódicamente cada 60 números. Los dos últimos, cada 300; a partir de ahí, se repiten cada números.
#include <iostream> using namespace std; int main(){ long long int vec[63]; long long int vec2[63]; vec[1]=0; vec[2]=1; vec[3]=1; vec[4]=2; vec[5]=3; vec[6]=5; vec[7]=8; vec2[1]=0; vec2[2]=1; vec2[3]=1; vec2[4]=2; vec2[5]=3; vec2[6]=5; vec2[7]=8; for(int i=8; i<61; i++) { vec[i]=vec[i-2]+vec[i-1]; vec2[i]=vec[i]%10; } long long int aux=1,aux2=1; int n; cin>>n; while(n--){ cin>>aux; if(aux<7) { cout<<vec2[aux]<<endl; } else { aux2=aux%60; if(aux2==0) cout<<1<<endl; else cout<<vec2[aux2]<<endl; } } return 0; }
Moraleja revisar las propiedades, si hubiera hecho antes eso me hubiera ahorrado mucho tiempo :xD.
Publicado por
starsaminf
en
12:08
0
comentarios
Enviar por correo electrónicoEscribe un blogCompartir en XCompartir con FacebookCompartir en Pinterest
Etiquetas:
SPOJ
jueves, 19 de abril de 2012
Burrito Amarrado
Problema B Burrito amarrado Entrada: burrito.in Salida: estándar. Máxima memoria: 32 MB Tiempo límite: 10 segundos Descripción Un burro se encuentra en un corral circular de radio R amarrado con una cuerda mágica a un poste situado en el centro del corral. Inicialmente el burro se encuentra junto al poste y comienza a caminar hacia el norte. La cuerda se pone tensa cuando el burro llega a la mitad del camino entre el poste y el corral. En ese momento el burro da vuelta 90º a la derecha y sigue caminando. De nuevo, la cuerda mágica únicamente le permite llegar hasta la mitad del camino entre el punto donde dio vuelta y el corral. Como el burro quiere escapar, continúa caminando de esta manera hasta que por n-ésima vez la cuerda lo obliga a detenerse. Tu trabajo es determinar la distancia entre el burro y el poste en ese momento. Entrada Cada caso de entrada consiste de una línea que contiene dos enteros R y n separados por un espacio (1 ≤ R, n ≤ 10000). La última línea de la entrada contiene dos ceros, ese caso no debe procesarse. Salida Para cada caso de entrada, imprime una línea que contenga la distancia entre el burro y el poste con 2 decimales de precisión. Ejemplo de entrada 120 1 120 4 0 0 Ejemplo de salida 60.00 40.69 Solucion Bueno en este problema se soluciona teniendo en cuenta que habran cuatro casos ya que gira en 0, 90 , 180 , 270 grados. El valor de X y de Y se altera sumando o restan la distancia del punto actual al corral de esta manera y = (y + sqrt(r*r-x*x))/2; x = (x + sqrt(r*r-y*y))/2; y = (y - sqrt(r*r-x*x))/2; x = (x - sqrt(r*r-y*y))/2; de acuerdo a los cuatro casos y a los signos en ellos. finalmente se usa el teorema de pitagoras para mostrar la hipotenusa. #include#include #include using namespace std; int main() { int r; int n; cin >> r; cin >> n; while(r+n!=0 ) { double x=0.0; double y=0.0; while(n--) { if (n%4==1) y = (y + sqrt(r*r-x*x))/2; if (n%4==2) x = (x + sqrt(r*r-y*y))/2; if (n%4==3) y = (y - sqrt(r*r-x*x))/2; if (n%4==0) x = (x - sqrt(r*r-y*y))/2; } cout.precision(2); cout << fixed << sqrt(x*x+y*y) < > r; cin >> n; } }
domingo, 15 de abril de 2012
UVa - 10132 - File Fragmentation
#include <iostream> #include <stdlib.h> #include <vector> using namespace std; int main() { int nroCasos ; string linea; getline(cin,linea); nroCasos = atoi(linea.data()); getline(cin,linea); while(nroCasos--) { int totalLetras = 0 ; vector<string> datos; while(getline(cin,linea) && !linea.empty()) { totalLetras += linea.size(); datos.push_back(linea); } int tamdatos = datos.size(); int longitudSol = totalLetras/(tamdatos/2); //fout << "POSIBLES SOLUCIONES"<<endl; vector<string> solucion; for(int i = 0; i<tamdatos; i++) for(int j = i+1; j < tamdatos; j++) if(datos[i].size()+datos[j].size() == longitudSol) solucion.push_back(datos[i]+datos[j]),solucion.push_back(datos[j]+datos[i]); tamdatos = solucion.size(); int marcas[tamdatos]; for(int i = 0; i<tamdatos; i++) marcas[i] = 0; string sol ; int may = -1 ; for(int i = 0; i<tamdatos; i++) if(marcas[i]==0) { for(int j = i; j < tamdatos; j++) if(solucion[i].compare(solucion[j])==0) marcas[j]=1, marcas[i]++; if(marcas[i]>may) may = marcas[i],sol = solucion[i]; } cout<<sol<<endl; if(nroCasos!=0) cout<<endl; } return 0; }
UVa - 10188 - Automated Judge Script
#include <iostream> #include <algorithm> #include <ctype.h> using namespace std; string soloNumeros(string cad) { string sol = ""; for(int i = 0; i < cad.size(); i++) if(isdigit(cad[i])) sol+=cad[i]; return sol; } int main(int argc, char *argv[]) { int a,b; int nrocaso = 1; string linea; while(getline(cin,linea)) { a = atoi(linea.data()); if(a == 0) return 0; string cadsA=""; for(int i = 0 ; i<a; i++) { getline(cin,linea); cadsA +=linea+'\n'; } getline(cin,linea); b = atoi(linea.data()); string cadsB=""; for(int i = 0 ; i<b; i++) { getline(cin,linea); cadsB += linea+'\n'; } cout<< "Run #"<<nrocaso<<": "; if(cadsA.compare(cadsB) == 0) cout << "Accepted"<<endl; else{ string numsA,numsB; numsA = soloNumeros(cadsA); numsB = soloNumeros(cadsB); if(numsA.compare(numsB)==0) cout << "Presentation Error"<<endl; else cout<< "Wrong Answer"<<endl; } nrocaso++; } return 0; }
UVa - 850 - Crypt Kicker II
#include <iostream> #include <algorithm> #include <vector> #include <stdlib.h> //#include <fstream> using namespace std; string cad = "the quick brown fox jumps over the lazy dog"; int tamcad = cad.size(); int cantespacios = 0; vector<int> lugares[100]; int tamlug=0; char reemplazos['z'+1]; void cargar() { cantespacios = count(cad.begin(),cad.end(),' '); tamcad = cad.size(); bool contado[tamcad] ; for(int i = 0 ; i<tamcad; i++)contado[i] = false; for(int i = 0 ; i<tamcad ; i++) if(!contado[i]) { contado[i] = true; lugares[tamlug].push_back(i); for(int j = i+1 ; j<tamcad; j++) if(cad[j]== cad[i]) { contado[j] = true; lugares[tamlug].push_back(j); } tamlug++; } } bool esEncriptado(string candidato) { int tam = candidato.size(); if(tam != tamcad) return false; if(count(candidato.begin(),candidato.end(),' ') == cantespacios) { vector<int> lugarescandid[100]; bool contado[tamcad]; for(int i = 0 ; i<tamcad; i++)contado[i] = false; int tamlugcandi=0; for(int i = 0 ; i<tamcad ; i++) if(!contado[i]) { contado[i] = true; lugarescandid[tamlugcandi].push_back(i); for(int j = i+1 ; j<tamcad; j++) if(candidato[j]== candidato[i]) { contado[j] = true; lugarescandid[tamlugcandi].push_back(j); } tamlugcandi++; } if(tamlugcandi!=tamlug) return false; for(int i = 0; i<tamlug ; i++) { if(lugares[i].size()!=lugarescandid[i].size()) return false; for(int j = 0; j<lugares[i].size(); j++) if(lugares[i][j]!=lugarescandid[i][j]) return false; for(int j = 0; j<tamcad ; j++) reemplazos[candidato[j]] = cad[j]; return true; } } return false; } int main() { //ifstream fin("entrada.txt"); //ofstream fout("salida.txt"); cargar(); int cantcasos; cin>> cantcasos; string linea; getline(cin,linea); getline(cin,linea); while(cantcasos--) { vector<string> conjunto; while(getline(cin,linea)) if(linea.compare("")!=0) conjunto.push_back(linea); else break; bool sw = false; for(int i = 0 ; i<conjunto.size(); i++) if(esEncriptado(conjunto[i])) { sw = true; break; } //cout << "tamaño del conjunto = "<< conjunto.size()<<endl; if(sw) { for(int i = 0 ; i<conjunto.size(); i++) { //cout << "linea a reemplazar = "<< conjunto[i]<<endl; for(int j = 0 ; j<conjunto[i].size(); j++) cout << reemplazos[conjunto[i][j]]; cout <<""<< endl; } } else cout << "No solution."<<endl; if(cantcasos!=0) cout <<endl; } return 0; }
jueves, 12 de abril de 2012
UVa - 10252 - Common Permutation
#include <iostream> #include <algorithm> using namespace std; int main() { string a,b,aux; int tama,tamb; while(getline(cin,a) && getline(cin,b)) { tama = a.size(); tamb = b.size(); sort(a.begin(),a.end()); sort(b.begin(),b.end()); string sol = ""; int i ,j = 0; for(i = 0; i<tama && j<tamb; i++) while(j<tamb && a[i]>=b[j]) { if(b[j]==a[i]) { sol += a[i]; j++; break; } j++; } cout << sol<<endl; } return 0; }
UVa - 10010 Where's Waldorf?
#include <iostream> using namespace std; int m,n; string abuscar; int tamcad; bool buscarH(int f,int c, string mapa[]) { //derecha int fin = c+tamcad-1; if(fin<n) { int i,j; for(i = c,j=0 ; i<=fin ; i++,j++) if(abuscar[j]!=mapa[f][i]) break; if(i-1 == fin) return true; } //izquierda fin = c-tamcad+1; if(fin>=0) { int i,j; for(i = c,j=0 ; i>=fin ; i--,j++) if(abuscar[j]!=mapa[f][i]) break; if(i+1 == fin) return true; } return false; } bool buscarV(int f,int c, string mapa[]) { //abajo int fin = f+tamcad-1; if(fin<m) { int i,j; for(i = f,j=0 ; i<=fin ; i++,j++) if(abuscar[j]!=mapa[i][c]) break; if(i-1 == fin) return true; } //arriba fin = f-tamcad+1; if(fin>=0) { int i,j; for(i = f,j=0 ; i>=fin ; i--,j++) if(abuscar[j]!=mapa[i][c]) break; if(i+1 == fin) return true; } return false; } bool buscarS(int f,int c, string mapa[]) { //derecha y arriba int finh = c+tamcad-1; int finv = f-tamcad+1; if(finh<n && finv>=0 ) { int i,j,k; for(i = c,k = f,j=0 ; i<=finh && k>=finv ; i++,j++,k--) if(abuscar[j]!=mapa[k][i]) break; if(i-1 == finh && k+1==finv) return true; } //izquierda y abajo finh = c-tamcad+1; finv = f+tamcad-1; if(finh>=0 && finv<m) { int i,j,k; for(i = c,j=0, k=f ; i>=finh && k<=finv; i--,j++,k++) if(abuscar[j]!=mapa[k][i]) break; if(i+1 == finh && k-1==finv) return true; } return false; } bool buscarB(int f,int c, string mapa[]) { //derecha y abajo int finh = c+tamcad-1; int finv = f+tamcad-1; if(finh<n && finv<m) { int i,j,k; for(i = c,j=0,k=f ; i<=finh & k<=finv; i++,j++,k++) if(abuscar[j]!=mapa[k][i]) break; if(i-1 == finh && k-1==finv) return true; } //izquierda y arriba finh = c-tamcad+1; finv = f-tamcad+1; if(finh>=0 && finv>=0) { int i,j,k; for(i = c,j=0,k=f ; i>=finh && k>=finv ; i--,j++,k--) if(abuscar[j]!=mapa[k][i]) break; if(i+1 == finh && k+1==finv) return true; } return false; } void buscar(string mapa[]) { int i,j; for(i=0; i < m; i++) for(j = 0; j < n; j++) if(buscarH(i,j,mapa) || buscarV(i,j,mapa) || buscarS(i,j,mapa) || buscarB(i,j,mapa)) { cout << i+1<<" "<<j+1<<endl; return; } } int main() { int casos,i,j,cb; cin>>casos; while(casos--) { cin >> m>>n; string mapa[m]; for(i = 0; i<m; i++) cin>>mapa[i]; for(i=0; i < m; i++) for(j = 0; j < n; j++) mapa[i][j] &= 95; cin>>cb; while(cb--) { cin>>abuscar; tamcad = abuscar.size(); for(i=0; i < tamcad; i++) abuscar[i] &= 95; buscar(mapa); } if(casos>0) cout << endl; } return 0; }
miércoles, 11 de abril de 2012
Project Euler 49
#include <iostream> #include <cmath> #include <algorithm> #include <vector> #include <set> #include <stdlib.h> using namespace std; bool esPrimo(int n) { if((n&1)==0) return (n==2); double raiz = sqrt(n); for(int i = 3; i<=raiz ; i+=2) if((n%i) == 0) return false; return true; } string parseString(int n) { string sol = ""; while(n>0) sol = (char)((n%10)+'0')+sol , n/=10; return sol; } bool esValido(string cad) { for(int i= 0 ; i<cad.size(); i++) if(cad[i]=='0') return false; return true; } int main() { bool probados[10000]= {false}; for(int n = 1488; n<=9999; n++) { if(!probados[n]) { string num = parseString(n); if(esValido(num)) { vector<int> permutaciones; do { int ent = atoi(num.data()); probados[ent] = true; permutaciones.push_back(ent); } while(next_permutation(num.begin(),num.end())); int nroPer =permutaciones.size(); for(int i = nroPer; i>=2 ; i--) if(esPrimo(permutaciones[i])) for(int j= i-1; j>=1 ; j--) if(esPrimo(permutaciones[j])) for(int k = j-1; k>=0; k--) if(esPrimo(permutaciones[k])) if(permutaciones[i]-permutaciones[j] == permutaciones[j]-permutaciones[k]) { cout << permutaciones[k]; cout << permutaciones[j]; cout << permutaciones[i]<<endl; return 0; } } } } return 0; }
Project Euler 48
import java.math.BigInteger; public class Main { public static void main(String[] args) { BigInteger res = BigInteger.ONE; BigInteger modu = new BigInteger("10000000000"); for (int i = 2; i <= 1000; i++) res = res.add(new BigInteger(i+"").modPow(new BigInteger(i+""), modu)); System.out.println(res.mod(modu)); } }
Project Euler 47
#include <iostream> #include <vector> #include <set> using namespace std; bool Factorizar(int n,int nrofactores,vector<int>* factores) { int i; int cant = 0; for(i = 2; n>1 ; i++) if((n%i) == 0 ) { cant++; if(cant>nrofactores) return false; int factor =i; n/=i; while((n%i) == 0) n/=i ,factor*=i; factores->push_back(factor); } return (cant==nrofactores); } int main() { int ini = 1; vector<int> a,b,c,d; bool swa,swb,swc,swd; swa =swb=swc=swd = false; while(true) { swa = swb; swb = swc; swc = swd; a.swap(b); b.swap(c); c.swap(d); d.clear(); swd = Factorizar(ini,4,&d); //cout <<ini<<" = " << swa <<" "<< swb <<" "<< swc <<" "<< swd <<endl; if(swa && swb && swc && swd) { set<int> miset(a.begin(),a.end()); miset.insert(b.begin(),b.end()); miset.insert(c.begin(),c.end()); miset.insert(d.begin(),d.end()); if(miset.size()==16) { cout << ini<<endl; return 0; } } ini++; } return 0; }
Project Euler 46
#include <iostream> #include <cmath> #define LIM 10000 using namespace std; int primos[5000]={0}; bool criba[LIM+1]={false}; int cantPrimos = 1; void generarCriba(){ int i,j; double raiz = sqrt(LIM); for(i = 4 ; i<=LIM ;i+=2) criba[i] = true; for(i = 3 ; i<=raiz;i+=2) if(!criba[i]) for(j = i+i ; j<=LIM ; j+=i) criba[j] = true; primos[0] = 2; for(i = 3; i<=LIM;i+=2) if(!criba[i]) primos[cantPrimos++] = i; } bool sePuedeEscribir(int n){ if(!criba[n]) return true; int i; for(i = 0; i<cantPrimos && primos[i]+2 <= n; i++){ int p = 1; int var; while((var=(primos[i]+(2*p*p)))<=n){ if(var==n) return true; p++; } } return false; } int main() { generarCriba(); int n = 33; while(true){ if(!sePuedeEscribir(n)){ cout << n<< endl ; return 0; } n+=2; } return 0; }
Project Euler 45
#include <iostream> #include <cmath> using namespace std; int incr = 286; int s = 40755; bool esTriangular(int n) { while(s<n) s+=incr, incr++; return s == n; } bool esPentagonal(int x) { double n = (sqrt(24.0*x + 1)+1)/6.0; return n==floor(n); } int main() { int hexa; int id=144 ; while(true) { hexa = id*(2*id -1 ); if(esPentagonal(hexa) && esTriangular(hexa)) { cout << hexa<<endl; return 0; } id++; } return 0; }
martes, 10 de abril de 2012
Project Euler 44
#include <iostream> #include <vector> #include <cmath> using namespace std; bool esPentagonal(int x) { double n = (sqrt(24.0*x + 1)+1)/6.0; return n==floor(n); } int obtPent(int n) { return (n*(3*n-1))/2; } int main() { vector<int> pentagonals; pentagonals.push_back(1); bool sw = true; int pent,resta; int k = 2; while(sw) { pent = obtPent(k); vector<int>::iterator it = pentagonals.begin(); while(it != pentagonals.end()) { resta = pent - (*it); if(esPentagonal(resta)) if(esPentagonal(pent+(*it))) { cout<<resta<<endl; return 0; } it++; } pentagonals.push_back(pent); k++; } return 0; }
Project Euler 43
#include <iostream> #include <algorithm> #include <stdlib.h> using namespace std; int primos[8] = {2,3,5,7,11,13,17}; int main() { string ini = "0123456789"; string fin = "9876543210"; unsigned long long int suma = 0 ; while(ini.compare(fin)!=0) { bool sw = true; for(int i = 7; i >= 1 && sw; i--) sw = ((((ini[i]-'0')*100+(ini[i+1]-'0')*10+(ini[i+2]-'0'))%primos[i-1])==0); if(sw) suma += atof(ini.data()); next_permutation(ini.begin(),ini.end()); } cout <<suma << endl; return 0; }
Project Euler 42
#include <iostream> #include <fstream> using namespace std; bool esT[200]; void generarTrian() { for(int i = 0 ; i<200; i++)esT[i] = false; int s = 1; for(int c = 2; s<200; c++) { esT[s] = true; s += c; } } int main() { generarTrian(); ifstream fin("words.txt"); string cad ; fin >> cad; cad += ","; int maxi = 0; int a,b; a = 0; b = -1; for(int i = 1 ; i<cad.size(); i++) { while(i<cad.size() and cad[i]!=',') i++; a = b+1; b = i; int tmp = 0 ; for(int j = a+1; j<b-1; j++) tmp += (cad[j]-'A'+1); if(esT[tmp]) maxi++; } cout << maxi << endl; return 0; }
Project Euler 41
#include <iostream> #include <algorithm> using namespace std; const int n= 7654322; bool esPrimo[n+1]; void generarCriba() { for(int i = 3 ; i <= n; i+=2) esPrimo[i] = true; for(int i = 4 ; i <= n; i+=2) esPrimo[i] = false; esPrimo[2] = true; for(int i = 3; i*i <= n; i+=2) if(esPrimo[i]) for(int j = i+i ; j <= n; j+=i) esPrimo[j] = false; } int main() { generarCriba(); string ini = "7654321"; string fin = "1234567"; int i = 0 ; while(ini.compare(fin)!=0) { if(((ini[6]-'0')&1)!=0) if(esPrimo[atoi(ini.data())]) { cout << ini << endl; break; } prev_permutation(ini.begin(),ini.end()); } return 0; }
Project Euler 37
#include <iostream> #include <bitset> #include <math.h> using namespace std; bool esPrimo(int n) { if(n==1) return false; for(int i = 2; i*i<=n; i++) if(n%i==0) return false; return true; } bool esCPI(int n) { int nc = 10; while(nc<n) { if(!esPrimo(n%nc)) return false; nc *= 10; } return true; } int main() { int ini=0,fin=0; int term[] = {1,3,7,9}; int td[100]= {2,3,5,7}; int pos=4; ini = 0; fin = 3; for(int cd = 1; cd<=9; cd++) { for(int i=ini ; i<=fin; i++) { for(int t = 0 ; t<=3; t++) { int ope = td[i]*10+term[t]; if(esPrimo(ope)) td[pos++] = ope; } } ini = fin+1; fin = pos-1; } int sum = 0 ,cant = 0; for(int i = 4; i<=fin ; i++) if(esCPI(td[i])) { cout << td[i] << endl; sum += td[i]; cant++; } cout << "cantidad total = "<<cant<<endl; cout << "resultado final = "<<sum<<endl; return 0; }
Project Euler 36
#include <iostream> #include <string> using namespace std; bool esPalindrome(string cad) { int i,j; i = 0; j = cad.size()-1; while(i<j) if(cad[i++]!=cad[j--]) return false; return true; } string abase2(int n) { string sol = ""; while(n>0) sol = (char)((n&1)+'0')+sol , n >>= 1; return sol; } string aString(int n) { string sol = ""; while(n>0) { int d = n%10; sol = (char)(d+'0')+sol; n /= 10; } return sol; } int main() { //872187 int suma = 0 ; const int n = 1000000; for(int i = 1; i < n; i+=2) if(esPalindrome(aString(i)) && esPalindrome(abase2(i))) suma += i; cout << suma << endl; return 0; }
Project Euler 35
#include <iostream> #include <bitset> using namespace std; const int n = 1000000; bitset<n+1> criba; void generarCriba() { criba[0] = criba[1] = true; for(int i = 2 ; i*i<=n; i++) if(!criba[i]) for(int j = i+i; j<=n; j +=i ) criba[j]= true; } int main() { generarCriba(); int cont = 4;//2,3,5,7 ya cuentan como primos circulares int cc = 1; int sncc= 100; int nc = 10; for(int i = 10 ; i<n; i++) { if(i==sncc) { cc++; sncc *=10; nc *= 10; } if(!criba[i]) { int num = i; int c = 0; for(int u = 1 ; u<=cc; u++) { int d = num%10; num /= 10; num = (d*nc+num); if(!criba[num]) c++; else break; } if(c == cc) cont++; } } cout <<"Resultado final = "<< cont<< endl; return 0; }
Project Euler 34
#include <iostream> using namespace std; int main() { int sum = 0 ; int fac[10] = {1,1,2}; for(int i = 3; i<=9; i++) fac[i] = i*fac[i-1]; int num = 0; int n[5]= {0}; for(n[0] = 0 ; n[0]<10 ; n[0]++) for(n[1] = 0 ; n[1]<10 ; n[1]++) for(n[2] = 0 ; n[2]<10 ; n[2]++) for(n[3] = 0 ; n[3]<10 ; n[3]++) for(n[4]= 0 ; n[4]<10 ; n[4]++) { int pos = 0 ; while(pos <=4 && n[pos]==0) pos++; if(fac[n[0]]+fac[n[1]]+fac[n[2]]+fac[n[3]]+fac[n[4]]-pos==num) { cout << n[0] << "! + "; cout << n[1] << "! + "; cout << n[2] << "! + "; cout << n[3] << "! + "; cout << n[4] << "! = " << num<< endl; sum += num; } num++; } cout << sum-3<< endl; /*Le restamos 3 por que en el enunciado indica que no hay que sumar 1! = 1 y 2! = 2 */ return 0; }
Project Euler 33
#include <iostream> using namespace std; int mcd(int a,int b) { int c; if(b>a) { c = a; a = b; b = c; } c = a%b; while(c > 0) { a = b; b = c; c = a%b; } return b; } int main() { int mcdiv; int de,nu; int resultadoden = 1; int resultadonum = 1; for(int num = 10; num<=50; num++) for(int den = 10; den <= 99 ; den++) { mcdiv = mcd(num,den); if(num != den && mcdiv!=1 && mcdiv%10!=0) { de = den/mcdiv; nu = num/mcdiv; int dat1[2]= {num/10,num%10}; int dat2[2]= {den/10,den%10}; for(int i=0; i<=1; i++) for(int j = 0; j<=1; j++) if(dat1[i]!=0 && dat2[j]!=0 && dat1[i]%nu==0 && dat2[j]%de==0 && (dat1[i]/nu)==(dat2[j]/de) && (dat1[(i+1)%2]==dat2[(j+1)%2])) { cout << num<<"/"<<den<<" = "<<dat1[i]<<"/"<<dat2[j]<<endl; resultadoden *= den; resultadonum *= num; } } } cout << "Resultado final = "<< resultadoden/mcd(resultadonum,resultadoden) <<endl; return 0; }
Project Euler 32
#include <iostream> #include <algorithm> #include <cstdlib> #include <set> #include <numeric> using namespace std; int factorial(int n) { int f = 1; while(n>0) f *= n--; return f; } int main() { set<int> guardar ; string cad = "123456789"; int tam = cad.length(); int n1,n2,n3,i,j; int fac = factorial(tam); for(int n = 0 ; n < fac; n++) { for(i = 1 ; i <=(tam-2) ; i++ ) { n1 = atoi(cad.substr(0,i).data()); for(j = 1 ; j <= (tam-i-1); j++) { n2 = atoi(cad.substr(i,j).data()); n3 = atoi(cad.substr(i+j,tam-i+j).data()); if((n1*n2) == n3) { cout << n1 << " x "<<n2 <<" = "<<n3<<endl; guardar.insert(n3); } } } next_permutation(cad.begin(),cad.end()); } cout << "Resultado Final = "<<accumulate(guardar.begin(),guardar.end(),0)<<endl; return 0; }
Suscribirse a:
Entradas (Atom)