Program - nie działa dla wszystkich N

0

Mój problem polega na tym, że program nie działa dla każdego n mniejszego od 6. W momencie kiedy wpisuję do niego liczbę większą na przykład 10 nic się nie wyświetla.

Treść zadania:

W Galerii Sztuki miało miejsce włamanie i kradzież pewnej ilości obrazów. Wszystkie obrazy
w kolekcji były oczywiście skatalogowane: opatrzono je kolejnymi numerami począwszy od pewnej
liczby całkowitej x. To znaczy dla przykładu, ze jeśli x = 4, a w galerii było 5 obrazów, to miały one
numery 4, 5, 6, 7 oraz 8.
Po włamaniu w galerii pozostało n obrazów o numerach a1, a2, . . . , an. Twoim zadaniem jest
obliczenie najmniejszej możliwej liczby skradzionych obrazów. Niestety personel galerii nie pamięta
ani wartości początkowego numeru x, ani liczby obrazów w galerii przed włamaniem.
Dane wejściowe
• n – ilość obrazów w galerii po włamaniu podaje użytkownik (dodatnia liczba naturalna n
<1, 100>
• a1 .... an - numery pozostawionych obrazów (liczby losowe <1, 200>
Program powinien wypisać minimalna liczbę skradzionych obrazów.
Przykład
Dla danych wejściowych
4
10 13 12 8
prawidłowym wynikiem jest:
2
(Skradziono obrazy 9 i 11.)

Oto mój program:

#include <iostream>
#include <ctime>
using namespace std;
  
int main()
{
    int n,i=0,x=0,min=0,max=0,a=0,b=0,pomoc=0,tab[n]={0};
     
    srand(time(NULL));
    cin>>n;
    if(n<=1)
    {
        cout<<"Podano zle wartosci!";
        exit(0);
    }
         
    for(int i=0; n>i; i++)
    {
    x=1+rand()%(200-1+1);   
    tab[i]=x;
             
    if(i==0)
    {
        a=x;        
    }
    else if(i==1)
    {
        b=x;
        if(b>a)
        {
        max=b;
        min=a;  
        }
        else if(a>b)
        {
        max=a;
        min=b;  
        }
    }
    else if(x>max)
    {
    max=x;
    }
    else if(x<min)
    {
    min=x;
    }
    else if(x==max||x==min)
    {
    pomoc++;    
    }
    else if(x<max&&x>min)
    {
      for(int p=0; p<i; p++)
      {
      if(tab[p]==tab[i])
      pomoc++;
      }     
    }
     
    cout<<x<<" ";
    }
         
     
    cout<<" - numery obrazow, ktore zostaly";
    cout<<endl;
    cout<<max<<" to jest maksymalny numer.";
    cout<<endl;
    cout<<min<<" to jest minimalny.";
    cout<<endl<<endl;
 
    cout<<max-min+1;
    cout<<" - to ilosc numerow z przedzialu obrazow (liczac razem z tymi skradzionymi).";
    cout<<endl;
     
    cout<<(max-min+1)-n+pomoc;
    cout<<" - wowczas skradziono przynajmniej tyle obrazow";
     
    return 0;
}
3

Cały ten kod przecież jest bez sensu o_O

int n,i=0,x=0,min=0,max=0,a=0,b=0,pomoc=0,tab[n]={0};

Tutaj utworzyłeś tablicę tab o jakimś losowym rozmiarze, zależnym od wartości jaką ma wartość n W TEJ CHWILI, a że to zmienna na stosie, to jest to jakaś losowa wartość ze stosu.
Dalej nie ma sensu czytać, bo ten kod nigdy nie zadziała.
Cały ten algorytm zresztą jest bez sensu i nijak się ma do rozwiązania podanego problemu.

  1. Wybrać min i max z pozostałych obrazów, to jest zakres obrazów który nas interesuje
  2. Powinno tam być max-min+1 obrazów, a wiemy ile dostaliśmy jako n więc ukradziono max-min+1-n
0
Shalom napisał(a):

Cały ten kod przecież jest bez sensu o_O

int n,i=0,x=0,min=0,max=0,a=0,b=0,pomoc=0,tab[n]={0};

Tutaj utworzyłeś tablicę tab o jakimś losowym rozmiarze, zależnym od wartości jaką ma wartość n W TEJ CHWILI, a że to zmienna na stosie, to jest to jakaś losowa wartość ze stosu.
Dalej nie ma sensu czytać, bo ten kod nigdy nie zadziała.
Cały ten algorytm zresztą jest bez sensu i nijak się ma do rozwiązania podanego problemu.

W porządku rzeczywiście kompletnie bez sensu, zdeklarowałem int tab[n] poniżej cin>>n i jego instrukcji ale dalej pojawił się kolejny problem, ponieważ program jeśli wpisze jako wartość n na przykład 6 to wyświetlają mi się 4 wylosowane liczby, a jak wpisze na przykład za n liczbę 3 to wyświetla się jedna.

0

W porządku, zobaczyłem w czym problem i już poprawiłem, bardzo dziękuję za pomoc i pozdrawiam :)

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