zadanie SPOJ - C

0

Zadanie :
http://pl.spoj.com/problems/PP0602D/

Moje wypociny :

int i, k, n, tab[10000];

scanf ("%d%d", &k, &n);
in=n%k;
for (i=0; i<k; ++i)
{
	if ((i+n)<k)
		scanf ("%d", &tab[i+n]);
	else
		scanf ("%d", &tab[i+n-k]);
}
for (i=0; i<k; ++i)
	printf ("%d ", tab[i]);

Dostaje komunikat o błędnej odpowiedzi, nie mam pojęcia gdzie jest błąd. PLEASE HELP

0

Popełniłeś taki błąd, że bez sensu nazywasz zmienne i jak nazwałbyś normalnie to sam byś znalazł miejsce gdzie jest coś nie tak.

#include <iostream>
using namespace std;
 
int znajdzIndeksDoWpisania(int i, int iloscWejsciowych, int oIlePrzesunac )
{
	int indeks;
 
	indeks = iloscWejsciowych - oIlePrzesunac + i;
	indeks %= iloscWejsciowych;
 
	return indeks;
}
 
int main() {
	int i, iloscWejsciowych, oIlePrzesunac, tab[10000];
 
    scanf ("%d%d", &iloscWejsciowych, &oIlePrzesunac);
 
    for (i=0; i<iloscWejsciowych; ++i)
    {
    	int indeks = znajdzIndeksDoWpisania( i, iloscWejsciowych, oIlePrzesunac );
 
        scanf ("%d", &tab[indeks]);
    }
    for (i=0; i<iloscWejsciowych; ++i)
        printf ("%d ", tab[i]);
	return 0;
} 

http://ideone.com/mMASfQ

Mógłbyś też zmniejszyć trochę złożoność robiąc coś takiego

  1. Wczytaj do tablicy oIlePrzesunac liczb
  2. Wczytaj i od razu wypisz na wyjście iloscWejsciowych - oIlePrzesunac liczb
  3. Wypisz na wyjście oIlePrzesunac liczb, które są w tablicy
1

Jak w c++ Ci odpowiada, użyj std::rotate, i po problemie.

0
for (i=0; i<k; ++i)
    scanf ("%d", &tab[([i+n)%k]);

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