Problema 3:void numar(long n, short c1, short c2, long &x)
{
long aux;
aux=x=0;
while (n>0)
{
if (n%10<c1 || n%10>c2)
aux=aux*10+n%10;
n=n/10;
}
while (aux>0)
{
x=x*10+aux%10;
aux=aux/10;
}
}
Nu am gasit alta metoda de a crea numarul x, decat ca rasturnat al lui aux, care se forma in urma prelucrarii cifrelor lui n. Daca exista, astept o rezolvare mai buna.
Problema 4:#include<fstream.h>
#include<conio.h>
int prim(int x)
{
int i,g=1;
for (i=2; i<=x/2 && g; i++)
if (x%i==0) g=0;
return g;
}
void main()
{
clrscr();
int x,p,n; p=n=0;
i
fstream f("bac.txt");
while (f>>x)
{
if (prim(x))
if (x>p)
{
p=x;
n=1;
}
else if (x==p)
n++;
}
f.close();
cout<<p<<' '<<n;
getch();
}
In ce consta eficienta nu stiu, oricum trebuie sa citesc toate numerele din fisier si sa vad daca sunt prime. Probabil este vorba despre felul in care compar numerele: daca nu sunt prime nu le mai folosesc la nimic, iar daca sunt prime verific daca valoarea este maxima si trebuie sa incep sa numar din nou, sau daca este egala cu cea precedenta si trebuie sa incrementez contorul.
Edit: Problema 4:#include<fstream.h>
#include<conio.h>
int prim(int x)
{
int i,g=1;
for (i=2; i<=x/2 && g; i++)
if (x%i==0) g=0;
return g;
}
void main()
{
clrscr();
int a[100], i, x, g=0;
for (i=0; i<100; i++) a[i]=0;
ifstream f("bac.txt");
while (f>>x)
{
a[x]++;
}
f.close();
for (i=99; i>=0 && g==0; i--)
if (prim(i) && a[i]>0)
{
cout<<i<<' '<<a[i];
g=1;
}
getch();
}
Am revenit cu o varianta mai buna, probabil varianta de rezolvare ceruta de corectori. Mi-a adus aminte Nuker de problema rezolvata anterior in acelasi fel, am modificat-o si am postat rezolvarea

Eficienta consta in folosirea unui numar semnificativ mai mic de comparatii si verificari

Las si rezolvarea de dinainte, poate ajuta cu ceva pe cineva.