Szanowni Państwo;
Na wykładzie będę kontynuował rekurencję i usuwanie rekurencji.
Propozycje zadań na ćwiczenia:
(Łatwe) zliczanie jedynek w reprezentacji binarnej liczby naturalnej n - rekurencja i iteracja
(Średnie) zadanie Gaussa o hetmanach -
patrz N.Wirth „Algorytmy + struktury danych = programy” str 163
albo Walczak & Walczak „Nauka programowania dla początkujących C++”
#include<stdio.h>
const int w=8;
const int p=15;
int a[w]; /* wiersze - */
int b[p]; /* przekatne / */
int c[p]; /* przekatne \ */
int x[w]; /* kolumny | */
void start(void);
void drukuj(void);
void probuj(int);
main()
{
start();
probuj(0);
}
void start(void)
{
int i;
for(i=0;i<w;i++) a[i]=1;
for(i=0;i<p;i++) b[i]=1;
for(i=0;i<p;i++) c[i]=1;
}
void drukuj(void)
{
for(int i=0;i<w;i++) printf("%d ", x[i]);
printf("\n");
}
void probuj(int i)
{ int j;
for(j=0;j<w;j++)
if(a[j] && b[i+j] && c[i-j+w-1])
{ x[i]=j;
a[j]=0; b[i+j]=0; c[i-j+w-1]=0;
if(i<w-1) probuj(i+1);
else drukuj();
a[j]=1; b[i+j]=1; c[i-j+w-1]=1;
}
}
uogólnienie dla szachownicy ( n na n) + zliczanie liczby rozstawień...
(dla ambitnych - super trudne!) jak szybko wyznaczyć rozstawienie n nie atakujących
się hetmanów na szachownicy (n na n) ?
Kolokwia:
Paczki z wynikami kolokwium ze studiów wieczorowych podzielę w tym tygodniu (czekałem aż otrzymam wszystkie).
Kolokwium (dla studentów dziennych) zrobimy po 6 maja.
Pierwsze zadanie będzie polegało na rekurencyjnym i iteracyjnym obliczaniu n tego wyrazu
zadanego ciągu. Nad drugim myślę...Treści zadań wyślę mailem.
Życzę Państwu Miłych Świąt!
Piotr Sapiecha