#include <cstdlib>
#include <iostream>
using namespace std;
int main(int argc, char*argv[])
{
unsigned short n; //deklaracja zmiennej n określającej długość planszy
unsigned short*sposoby=new
unsigned short[n-1]; //deklaracja tablicy, z której odczytujemy ilość sposobów na wygraną
cout<<"podaj ilosc pol:"<<endl;
cin>>n; //wczytanie ilości pól planszy
bool*pola=new bool[n]-1; //zadeklarowanie tablicy z polami planszy, na której określamy, gdzie są dziury
cout<<"podaj pola gry:"<<endl;
int i=0;
do{
std::cin>>pola[i];
i++;
}while(i<n); //wczytanie pół planszy
for (int i=1; i<=n; i++){
sposoby[i]=1;
} //wypełnienie wszystkich pól planszy "sposoby" jedynkami
for(int i=1; i<=n; i++){
for(int j=1;j<=6;j++){
if(i-j>=0){
if (pola[i-j]==1){
sposoby[i]=sposoby[i]+sposoby[i-j]; //obliczenie ilości sposobów wygrania w grze
}
}
}
}
cout<<"wynik:"<<(sposoby[n-1])%1000<<endl; //wypisanie wyniku, %1000 oznacza, że wypisujemy wynik modulo 1000
system("pause");
return EXIT_SUCCESS;
}
Zad 1. Dziurawa plansza.
Na planszy o n polach (ponumerowanych od 1 do n) soi pionek na polu o numerze 1. Niestety plansza zniszczyła się z biegiem czasu i niektóre pola (poza 1 i n) są dziurawe. Jeden gracz wielokrotnie rzuca kostką sześcienną i przesuwa pionek o liczbę pól wskazaną na kostce (1,2,…, 6). Gra kończy się gdy:
• pionek stanie na polu o numerze n (meta) – wtedy racz wygrywa,
• pionek wpadnie w dziurę lub wyjdzie poza planszę – wtedy gracz przegrywa.
Napisz program obliczający liczbę różnych rozgrywek (ciągów wyników rzutu kostką) prowadzących do wygranej.
Program powinien pobierać następujące dane w kolejnych liniach:
• n – wielkość planszy 1<n<1000000
• p1 p2 p3… pn – n cyfr 1 lub 0 (bez spacji) określających występowanie dziur na planszy (0 oznacza dziurę na i-tym miejscu)
Program powinien zwracać liczbę sposobów, na jaką można dojść z pola 1 do pola n, nie wpadając do dziury.
Np. dla danych:
7
1101001
Poprawną odpowiedzią jest: 4
Usprawnienie 1*. Zadbaj o typy używanych zmiennych tak, aby zużywać tylko niezbędną ilość pamięci.
Usprawnienie 2*. Obliczaj wyniki mod 1000, dzięki temu nie przekroczysz zakresu zmiennej zawierającej wynik.