Czesc, zaczalem przedwczoraj nauke c++, przerobilem juz 5 odcinkow na kanale Pasji Informatyki, i wpadlo w moje rece ciekawe zadanie, wiec postanowilem sprobowac. Wydaje mi sie, ze jestem juz dosc blisko rozwiazania, ale ilekroć wydaje mi się, że jestem już blisko, okazuje się, że istnieją warunki, ktorych nie pokrywam. W jaki sposob zabierac sie do zadan tak, aby nie pominac potencjalnych przypadkow - czy wypada zrobic pierw schemat blokowy w przypadku bardziej skomplikowanych zadan ? Z góry dziekuje za porady.
Tresc zadania brzmi: Wyobraźmy sobie, że mamy ulicę, przy której stoi rząd wieżowców o różnej wysokości (całkowitej), a na dachu każdego z nich siedzi snajper.
Dwaj snajperzy się widzą, jeżeli odcinka pomiędzy ich dachami nie przecina żaden wieżowiec (zakładamy, że jeśli odcinek przecina się dokładnie na dachu to snajper jest widoczny).
Dla przykładu, jeżeli pierwszy wieżowiec ma wysokość 10 m a czwarty 40 m, snajperzy pierwszy i czwarty widzą się nawzajem, jeżeli drugi wieżowiec jest nie wyższy niż 20 m i trzeci jest nie wyższy niż 30 m.
Zakładamy, że odległości między kolejnymi wieżowcami są równe.
Napisz program, który wczyta liczbę wieżowców oraz wysokości kolejnych wieżowców (dodatnie liczby całkowite) oraz odpowie na pytania: Ilu innych snajperów widzi pierwszy snajper?
kod, ktory zrobilem:
#include <iostream>
#include <windows.h>
#include <cstdlib>
#include <conio.h>
using namespace std;
int wysokoscwiezowca[1000000];
int x;
int main()
{
cout << "Siemanko" << endl;
cout << "Ile wiezowcow ze snajperami bedzie? :" << endl;
cin >> x;
cout << "Podaj wysokosc 1 wiezowca";
cin >> wysokoscwiezowca[0];
cout << "Podaj wysokosc 2 wiezowca";
cin >> wysokoscwiezowca[1];
cout << "Snajper pierwszy widzi 2 snajpera" << endl;
for (int i=2; i<x; i++)
{
cout << "Podaj wysokosc " << i+1 << " wiezowca";
cin >> wysokoscwiezowca[i];
if((wysokoscwiezowca[i]<=wysokoscwiezowca[0])&&((wysokoscwiezowca[i]-wysokoscwiezowca[i-1]<=(wysokoscwiezowca[i-1]-wysokoscwiezowca[i-2]))))
cout << "Snajper pierwszy widzi " << i+1 << " snajpera" << endl;
else if(((wysokoscwiezowca[i]>wysokoscwiezowca[0]))&&(wysokoscwiezowca[i]>wysokoscwiezowca[i-1])&&(wysokoscwiezowca[i]-wysokoscwiezowca[i-1]>=(wysokoscwiezowca[i-1]-wysokoscwiezowca[i-2])))
{
cout << "Snajper pierwszy widzi " << i+1 << " snajpera" << endl;
}
else
{
cout << "Snajper pierwszy nie widzi " << i+1 << " snajpera";
break;
}
}
return 0;
}
Z gory dzieki za pomoc w nauce! :)