Problem z zadaniem Król z Main2

0

Wstęp do programowania, lekcja 10 (Quiz). Dostępna pamięć: 256 MB. 13–19.12.2014
Na pewnym polu na szachownicy 8 × 8 stoi król. Chcielibyśmy dowiedzieć się, na ile różnych pól może przeskoczyć ta figura w jednym ruchu∗
. Zakładamy, że na szachownicy nie ma w tym momencie żadnych innych
figur.
Wejście
Pierwszy i jedyny wiersz wejścia zawiera jedną literę k oraz jedną cyfrę w, oddzielone spacją. Litera k oznacza
kolumnę szachownicy (k ∈ {a, . . . , h}), a cyfra w oznacza wiersz szachownicy (w ∈ {1, . . . , 8}).
Wyjście
W jedynym wierszu wyjścia Twój program powinien wypisać jedną liczbę całkowitą – liczbę pól szachownicy,
na które może przeskoczyć król umieszczony na zadanym polu.
Przykład
Dla danych wejściowych:
d 5
poprawnym wynikiem jest:
8
natomiast dla danych wejściowych:
a 8
poprawnym wynikiem jest:
3

Czy może ktoś powiedzieć dlaczego mój kod nie działa.

Raport ostatecznego sprawdzania

Test	Wynik	Czas	Wynik
1	OK	0.00s/1.00s	10/10
2	OK	0.00s/1.00s	10/10
3	OK	0.00s/1.00s	10/10
4	OK	0.00s/1.00s	10/10
5	OK	0.00s/1.00s	10/10
6	OK	0.00s/1.00s	10/10
7	Zła odpowiedź	0.00s/1.00s	0/10
8	Zła odpowiedź	0.00s/1.00s	0/10
9	OK	0.00s/1.00s	10/10
10	Zła odpowiedź	0.00s/1.00s	0/10
7 wiersz 1: wczytano '3', a oczekiwano '5'
8 wiersz 1: wczytano '3', a oczekiwano '5'
10 wiersz 1: wczytano '8', a oczekiwano '5'
#include <iostream>
using namespace std;


int ilosc_ruchow(int k, int w){
    if(k==1 || w==8){
        if(w=='a' || w=='h') return 3;
        return 5;
    }
    if(w=='a' || w=='h'){
        return 3;
    }
    return 8;
}
int main(){
int k;
char w;
cin>>w>>k;

cout<<ilosc_ruchow(k,w);

return 0;
}
1

w==8 to ma być literka, a porównujesz do liczby.

0
kq napisał(a):

w==8 to ma być literka, a porównujesz do liczby.

Możesz napisać jak powinien wyglądać wtedy ten kod bo nie za bardzo wiem o co chodzi.

0

k==1 || w==8
Dlaczego porównujesz raz k a raz w?

2

Nie testowałem, ale nie powinno byc tak (skrajne przypadki k = a, k = h, oraz w = 1 i w = 8, w przecwnym przypadku zwróć 8)?

int ilosc_ruchow(char k, int w){
	if(k=='a' || k=='h'){
		if(w==1 || w==8) return 3;
		else return 5;
	}
	else if(w==1 || w==8){
		if (k=='a' || k=='h') return 3;
		else return 5;
	}
	else
		return 8;
}
int main(){
	char k;
	int w;
	cin>>k>>w;
0

Wielkie dzięki działa.

0
#include <iostream>
using namespace std;

int main()
{
   static const int tb[2][2]={{8,5},{5,3}};
   int k,w;
   cin>>w>>k;
   cout<<tb[(w=='a')||(w=='h')][(k=='1')||(k=='8')];
   return 0;
}

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