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
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
#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;
}
Alte întrebări interesante
Fizică,
8 ani în urmă
Religie,
8 ani în urmă
Matematică,
8 ani în urmă
Matematică,
8 ani în urmă
Matematică,
9 ani în urmă