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

Problema 1 – test 100 puncte
Georgel vrea să-i testeze cunoştinţele de matematică lui Săndel. Pentru aceasta, îi propune lui Săndel două
numere naturale a şi b. Cu prima cifră a numărului a, plasată în locul primei cifre a numărului b se formează
un nou număr. Un alt număr se formează cu prima cifră a numărului a plasată în locul ultimei cifre a
numărului b. Se obţin două noi numere cu a doua cifră a numărului a plasată în locul primei cifre a
numărului b, respectiv în locul ultimei cifre a numărului b. Se continuă formarea şi altor numere după
aceleaşi reguli, până când se epuizează cifrele numărului a (dacă numărul a are 3 cifre, atunci se vor forma
6 numere).
Cerinţă
Cunoscând cele două numere a şi b, Săndel va trebui să găsească cel mai mare număr prim format conform
regulii de mai sus, ştiind că se iau în calcul pentru această determinare şi valorile iniţiale ale numerelor a şi
b. În cazul în care nu există niciun număr prim, conform cerinţelor de mai sus, se va afişa cel mai mare
număr care se poate forma, ştiind că se iau în calcul şi valorile iniţiale ale numărului a şi b.
Date de intrare
Se citesc de la tastatură a şi b în această ordine.
Date de ieşire
Se va afişa pe ecran numărul cerut.
Restricţii şi precizări
10  a,b 1000000

Răspunsuri la întrebare

Răspuns de mirceaantonsirghe
1

Răspuns:

#include <iostream>

using namespace std;

int v[25];

int prima(int a,int b)

{

   int nr=nr*10+a;

   while(b>9)

   {

       nr=nr*10+b%10;

       b/=10;

   }

   return nr;

}

int ultima(int a,int b)

{

   return (b/10)*10+a;

}

int nrcif(int a)

{

   int cif=0;

   while(a>0)

   {

       cif++;

       a/=10;

   }

   return cif;

}

bool prim(int a)

{

   if(a<2)return false;

   if(a==2)return true;

   for(int i=2;i<=a/2;i++)

   if(a%i==0)return false;

   return true;

}

int main()

{

   int a,b,cifra,pmax=-1,tmax=-1;

   cin>>a>>b;

   cifra=nrcif(a);

   v[1]=a;

   v[2]=b;

   for(int i=3;i<=cifra*2+2;i+=2)

   {

       v[i]=prima(a,b);

       v[i+1]=ultima(a,b);

   }

   for(int i=1;i<=cifra*2+2;i++)

   {

       if(prim(v[i])==true && v[i]>pmax)pmax=v[i];

       if(v[i]>tmax)tmax=v[i];

   }

   if(pmax!=-1)cout<<pmax;

   else cout<<tmax;

   return 0;

}

Explicație:

Ma roooog sa mearga pt ca nu am gasit exemple concrete. Trb testat cu numere foarte mari dar si asa ar dura mult. Sper sa fie bun codul.


mirceaantonsirghe: am gasit exemple si nu cred ca merge
mirceaantonsirghe: scuze
mirceaantonsirghe: incerc sa vad ce e gresit
ciprian74: ok. Nici o problema. Multumesc!
Alte întrebări interesante