Zadanie TABLICE ze spoja, problem z wypisywaniem odwrotnym

0

Mam mały problem z niby prostym zadaniem: http://pl.spoj.pl/problems/PP0502B/

#include<iostream>
using std::cout;
using std::cin;
int main()
{
        unsigned short int t;
        cin >> t;
        cout << "Przyjeto t=" << t << "\n";
        while(t--)
        {
                cout << "Wykonanie petli nr: " << t << "\n";
                unsigned short int n;
                cin >> n;
                cout << "Przyjeto n=" << n << "\n";
                int *tab=new int[n];
                for(unsigned short i=0;i<n;i++)
                {
                        cin >> tab[i];
                        cout << "INIT[" << i << "]\n";
                }
                cout << "Zainicjalizowano tablice\n";
                for(unsigned short i=(n-1);i==0;i--)
                {
                        //cout << tab[i];
                        cout << "OUT[" << i << "]\n";
                }
                cout << "Wypisano tablice\n";
                delete [] tab;
                tab=0;
        }
        return 0;
}

Dodatkowe komunikaty wstawiłem po to, by sprawdzić, gdzie jest problem. Kod w tej postaci wykonuje się, owszem, ale nie są wypisywane wartości, inicjalizacja jest dobra. Przykład: http://ideone.com/sQid7

#include<iostream>
using std::cout;
using std::cin;
int main()
{
        unsigned short int t;
        cin >> t;
        cout << "Przyjeto t=" << t << "\n";
        while(t--)
        {
                cout << "Wykonanie petli nr: " << t << "\n";
                unsigned short int n;
                cin >> n;
                cout << "Przyjeto n=" << n << "\n";
                int *tab=new int[n];
                for(unsigned short i=0;i<n;i++)
                {
                        cin >> tab[i];
                        cout << "INIT[" << i << "]\n";
                }
                cout << "Zainicjalizowano tablice\n";
                for(unsigned short i=(n-1);i>0;i--) //***tu zmieniony warunek***
                {
                        //cout << tab[i];
                        cout << "OUT[" << i << "]\n";
                }
                cout << "Wypisano tablice\n";
                delete [] tab;
                tab=0;
        }
        return 0;
}

Po zmianie warunku w pętli for przy wypisywaniu owszem, wypisze mi kilka wartości, ale (co jest tu akurat zrozumiałe) nie wypisze tab[0]. Można byłoby dodać "ręcznie" tą wartość, ale nie będzie to eleganckie rozwiązanie. Przykład: http://ideone.com/rhK1v

Pytanie - jaki warunek musi być w for ? Wydawało mi się, że == będzie logicznym rozwiązaniem, ale okazuje się, że nie.

1

http://ideone.com/MGs9w
warunek to >=0, nie może być to unsigned,gdyż gdy i == 0, zrobi dekrementację i i będzie wynosiło 65535 i tak w w nieskończoność, gdy masz inta ze znakiem to bo dekrementacji i == -1 i warunek i<=0 jest spełniony więc koniec.

0

http://ideone.com/V6U7q

Dzięki, działa, choć pewnie jest lepsze rozwiązanie.

0

a ja zrobiłbym to w C bez tablic:

main(OO,O0){
	if( OO > 00 ) {
		scanf( "%d", &OO );
		while( OO-- ) {
			scanf( "%d", &O0 );
			main( 00, O0 ); } }
	else if( O0 > 00 ) {
		scanf( "%d", &OO );
		main( 00, O0-'0'/'0' );
		printf( "%d ", OO ); }
	else puts( "" );}

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