Informatică, întrebare adresată de mirynis, 8 ani în urmă

Se citesc de la tastatură două numere naturale din intervalul [1,81], p1 și p2, și se cere scrierea în fișierul bac.out a tuturor numerelor naturale cu exact 7 cifre, pentru care produsul primelor două cifre este egal cu p1, cele trei cifre din mijloc sunt egale între ele, iar produsul ultimelor două cifre este egal cu p2. Numerele apar în fișier în ordine strict descrescătoare, fiecare pe câte o linie. Proiectați un
algoritm eficient din punctul de vedere al memoriei utilizate și al timpului de executare.
Exemplu: dacă p1=12, iar p2=8, atunci 2633324 și 3400018 sunt două dintre cele 160 de numere cu proprietatea cerută (2∙6=3∙4=12 și 2∙4=1∙8=8).
a. Scrieți programul C/C++ corespunzător algoritmului proiectat.
b. Descrieți în limbaj natural algoritmul proiectat, justificând eficiența acestuia

Răspunsuri la întrebare

Răspuns de MariusCelTrifan
15

Răspuns:

#include <iostream>

using namespace std;

int main()

{

unsigned int p1,p2,a,b,c,d,e,f,g,X;

long long i;

do

{

cout<<"p1=";

cin>>p1;

cout<<"p2=";

cin>>p2;

}while(p1>81 || p2>81 || p1<1 || p2<1);

for(i=9999999;i>1000000;i--)

{

X=i;

g=X%10;

X=X/10;

f=X%10;

X=X/10;

e=X%10;

X=X/10;

d=X%10;

X=X/10;

c=X%10;

X=X/10;

b=X%10;

X=X/10;

a=X%10;

X=X/10;

if(a*b==p1 && c==d && d==e && f*g==p2)

   cout<<i<<" ";

}

return 0;

}

Explicație:

5 stele+multumesc+cel mai inteligent raspuns?


1Nova1: Mai degraba asa
1Nova1: #include
#include

using namespace std;

ifstream in("bac.in");
ofstream out("bac.out");

int main()
{
int p1, p2;
in>>p1>>p2;

for(int i=1; i<=9; i++)
{
if(p1%i==0 && p1/i<10) /// i si p1 sunt primele 2 cifre
{
for(int j=1; j<=9; j++)
{
if(p2%j==0 && p2/j<10) ///j si p2 sunt ultimele 2 cifre
{
for(int k=0; k<=9; k++) /// cei 3 k sunt cele 3 cifre de la mijloc
{
out< out< out< out< }
}

}
}

}

return 0;
}
1Nova1: Nu s-a lipit bine, unde am dat out ar fi trebuit sa fie out<
1Nova1: i ; p1/i ; k ; k ; k ; j ; p2/j
mirynis: Multumesc mult!
Alte întrebări interesante