problem z testami

0

zadanie :
Dla dwóch liczb całkowitych a i b takich, że 0 < a <=b < 1000000 wypisz wszystkie liczby nieparzyste z przedziału domkniętego [a..b].
Input

W pierszej lini liczba t określająca liczbę zestawów danych.

Każdy zestaw danych składa się z dwóch liczb a i b.
Output

Dla każdego zestawu w jednej linii liczby nieparzyste z przedziału [a..b] oddzielane spacjami.
Example
Input:
2
3 7
40 46

Output:
3 5 7
41 43 45

zrobiłem tak :

#include <cstdlib>
#include <iostream>

using namespace std;

int main()
{
    int a,b,t;
    cin>>t;
    
    while (t>0)
    {
              if(0 < a <=b < 1000000 )
              {
                   cin>>a>>b;
                   
                 for(int i=a; i<=b; i=i+2)
                 {
                         cout<<i<<" ";
                         }
              }
              t--;
              }
    system("PAUSE");
    return 0 ;
}

problem w tym że u mnie wygląda to tak

In 2
3 7
out 3 5 7
in 41 27
out 41 43 45 47

i się kończy chodzi o to że nie wiem jak zrobić aby napoczątku 2x było in i potem 2x out

:)

dałem kod w <code> i poprawiłem lekko formatowanie - msm

0

Myślisz że już zapomniałem o tym wątku? ;]
To też pasuje do newbie bardziej zresztą.

0

no dobra jestem pierwszy raz na tym forum i w ogóle nie wiem o co wam chodzi z tymi śmiesznymi nazwami a zrobiłem jeszcze jeden wątek z moim rozwiązaniem bo uznałem że tamten został usunięty cz coś i nikt tego nie przeczyta :(

0

to co może jakaś pomoc i sugestie ? :)

0

Obawiam się że Twój kod nie ma wiele wspólnego z tym czego wymagają ;]

Do while jest dobrze, ale później:

if(0 < a <=b < 1000000 )
    cin>>a>>b;
  1. sprawdzasz warunek przed wczytaniem zmiennych
  2. nawet gdyby nie to, tak nie można. Tzn. ten kod robi zupełnie co innego niż myślisz, coś w rodzaju if(((0 < a) <= b) < 1000000 ) co oczywiście nie ma sensu.
  3. to jest założenie, nie masz tego sprawdzać.
for(int i=a; i<=b; i=i+2) {
    cout<<i<<" ";
}

Prawie... Tylko nie robisz nic jeśli a jest parzysta. Czyli wypiszesz liczby od a do b co dwa, nie sprawdzając czy są parzyste.

W miarę poprawiona wersja:

#include <iostream>

int main() {
    int a, b, tests;
    std::cin >> tests;
    
    while (tests--) {
        std::cin >> a >> b;
        for (int i = a / 2 * 2 + 1; i <= b; i += 2) {
            std::cout << i << " ";
        }
        std::cout << std::endl;
    }
}

Jedyny ciekawy fragment to i = a / 2 * 2 + 1, możesz to usnać za magię ;) (tak działa dzielenie całkowitoliczbowe, przećwicz na paru przykładach jeśli nie wiesz czemu to działa)

0

czyli co mam zrobić z tym założeniem z treści zadania ?

(dopiero od września mam programowanie i nie bardzo ogarniam )

0

Masz po prostu założyć, że liczb spoza tego przedziału po prostu na wejściu nie będzie.

0

Nic nie robisz, zakładasz.
To jest po to żebyś wiedział że, powiedzmy, liczby nie są większe od 123455678978, bo wtedy nie mieściłyby się w zwykłym incie. Tutaj nie ma to większego znaczenia, ale są zadania gdzie dobrze wiedzieć jaką wielkość mają dane wejściowe.

0

a jakoś bez tego dzielenia się nie da chodzi o to że te zadania są za spoja i mój nauczyciel ma do nich wgląd a ponieważ nie mieliśmy czegoś takiego nie uwieży że jestem aż tak genialny :)

0

Zamień je na odpowiedni if (jeśli jest parzysta to dodaj jeden).

0

acha no dobra wiem jak to zrobić tylko że nawet z tym twoim dzieleniem spoj odrzucił moje rozwiązanie a tam wszystko musi się zgadzac co do przecinka bo inaczej nie zaakceptuje

a nadal te in i out są w złej kolejności i może dlatego ?

0

Na pewno nie dlatego. Podaj aktualny kod jaki podsyłasz na spoj'a.

0

Mam nadzieję że nie dodałeś system("pause") (jak w oryginale) samodzielnie na koniec?

0

poprawne rozwiązanie zaakceptowane przez spoja

#include <cstdlib>
#include <iostream>

using namespace std;

int main()
{
int a,b,t;
cin>>t;

while (t--)

{
cin>>a>>b;

             while ( a<=b)
             { 
                   if(a%2!=0)
                   {
                   cout<<a<<" ";
                    }
                     a++;
                    
                     }
          
          
          
          }
          
        

system("PAUSE");
return 0 ;

}

DZIĘKI ZA POMOC

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