Informatică, întrebare adresată de sacalu50, 9 ani în urmă

Buna.Aceasta este problema :Se citeşte de la tastatură un număr natural. Să se determine cea mai mare cifră care apare în scrierea acestuia şi numărul de apariţii ale ei.
Iar rezolvare mea:int main()
{
int n,max=0,x,aux;
aux=n;
cin>>n;
while(n!=0)
{
if(n%10>max)
max=n%10;
n=n/10;
}
while(aux!=0)
{if(aux%10==max)
x++;
aux=aux/10;
}
cout<

return 0;
}
As vrea sa stiu de ce ca raspuns imi da :7 -2 in loc de :7 2 daca tastez nr 274705??


Razzvy: trebuia sa-l initializezi pe x cu 0
Razzvy: la inceput
ionutg38: Iar atribuirea aux=n trebuie facuta dupa ce-l citesti pe n, nu inainte.
artur99: Și ai fi putut face într-un singur while :D
sacalu50: Multumesc!
StelianPaul: cout<<?
StelianPaul: ce trebuie sa scriu la afisare?

Răspunsuri la întrebare

Răspuns de Gillga
0
problema este ca aux ia valoarea n inainte de citire , ceea ce inseamna ca ia valoarea lui n, acesta avand o valoare reziduala (ramasa in memorie) ce poate fii oricat. A doua este ca x nu o ia fe la zero, acesta avand de asemenea o valoare reziduala. Cele doua pot avea orice valoare, pentru a putea numara, cel mai bine ar fii sa-l initializezi cu zero.

( P.S. : eu unul as fi folosit un vector de aparitii, unde fiecare valoare (intre 0-9) iau zero si numara aparitiile fiind incrementate la fiecare aparitie, apoi luand vectorul de la final spre inceput ai putea gasii usor cifra maxima cu aparitia ei. acela fiind prima valoare != de zero. Asta e doar o idee, cum as fi facut eu. !Rezolvarea ta este corecta si buna! )


Sper ca te ajuta , daca mai ai intrebari , nu ezita sa intrebi; bafta. ^-^
Răspuns de Razzvy
0
#include <iostream>
using namespace std;

int main()
{
   int n, max = 0, x = 0;
   cin>>n;
   while(n)
   {
      if(n % 10 == max) ++x;
      else if(n % 10 > max)
      {
         max = n % 10;
         x = 1;
      }
      n /= 10;
   }
   cout<<max<<' '<<x;
}
Alte întrebări interesante