Prośba o pomoc z programem w C++

0

Mam takie zadanie. Napisać program, który dla zadanej liczby naturalnej n, podaje z ilu różnych cyfr jest złożony jest jej zapis oraz wypisuje te cyfry na ekranie w kolejności malejącej.

Udało mi się wykonać 2/3 z zadania, zrobiłem sortowanie ale po uruchomieniu programu wyskakują mi jakieś dziwne ciągi liczb. Podpowiedzcie, gdzie mogłem zrobić błąd?

Pozdrawiam

 
#include <iostream>
#include <windows.h>
#include <cmath>
#include <cstdlib>

using namespace std;

int main()
{
	int i,j;
	//Wczytuję z klawiatury liczbę naturalną N
	
	cout<<"Podaj liczbe naturalna N ";
	int n;
	cin>>n;
	
	//Obliczam z ilu cyfr składa się liczba
	
	cout << "Liczba sklada sie z ";
	cout << (int)log10(n)+1; 
	cout << " cyfr" "\n";
	
	//Przeprowadzam sortowanie liczb w kolejności malejącej"

	cout << "Posortuje teraz liczby w kolejnosci malejacej";
	int tablica[n];
	
	for ( j=0; j<n-1; j++)
		for ( i=0; i<n-1; i++)
			if (tablica[i]>tablica[i+1])
				swap(tablica[i], tablica[i+1]);
	
	for ( i=0; i<n; i++)
		cout<<tablica[i];
		cout<<endl;
 	system("pause");
    return 0;
}
2

Nie zapisujesz cyfr do tablicy.

1
#include <iostream>
#include <string>
using namespace std;

int main()
  {
   cout<<"Podaj liczbe naturalna N: ";
   unsigned long long n;
   if(cin>>n)
     {
      unsigned tb[10]={0};
      if(!n) ++tb[0];
      else for(;n;n/=10) ++tb[n%10];
      unsigned diff=0;
      for(unsigned i=0;i<10;++i) diff+=(tb[i]>0);
      cout<<"Liczba sklada sie z "<<diff<<" róznych cyfr: ";
      for(unsigned i=10;i--;) if(tb[i]) cout<<i;
      cout<<endl;
     }
   return 0;
  }
0
kmph napisał(a):

Nie zapisujesz cyfr do tablicy.

W jaki sposób zapisać te cyfry które podaje do tablicy?

5
int tablica[n];
  • To nie jest kod C++ - VLA.
  • Gdzie uzupełniasz tę tablicę? Nigdzie. Ma więc ona "losową" zawartość, a próba jej odczytu to UB.
int i,j;

Dlaczego deklarujesz zmienne tak daleko od ich miejsca użycia?

for(int i = 0; i < n; ++i)
  • Według zadania masz pokazać różne cyfry, a nie wszystkie z powtórzeniami, jak to pokazujesz w kodzie. 111211 powinno pokazać 211111 czy 21?
  • Tragiczne sortowanie, zawsze najbardziej pesymistyczny wariant bubblesorta. Użyj std::sort.
  • Popraw formatowanie kodu. Jak nie umiesz to polecam http://format.krzaq.cc styl file

1 użytkowników online, w tym zalogowanych: 0, gości: 1