Professional Documents
Culture Documents
Auditorne Vjezbe11
Auditorne Vjezbe11
Polja kao
parametri
Auditorne vježbe
Primjer 1 – Razmjena pisama
ULAZ: Prirodni broj N i polje P[N] koje sadrži brojeve od 0..N-1 (koji nisu
sortirani)
IZLAZ: Poštar je ispostavio N pisama na krive adrese. Treba napraviti program
koji će rasporediti pisma po naznačenim adresama u što je manje moguće
koraka. U svakom koraku svaka osoba koji ima pismo koje nije njegovo
razmjenjuje pismo s nekom drugom osobom.
Organizacija podataka
Ulazni podaci dani su u polju duljine N koje sadrži različite brojeve
između 0..N-1.
Broj u i-tom elementu ulaznog polja predstavlja broj osobe kome pripada
pismo koje i-ta osoba trenutno posjeduje.
1. Za i = 0..N-1 radi
2. M=N
3. Ako je A[i] = i
4. M=M-1
5. vrati M
#include <iostream>
using namespace std;
1. Za i = 0..N-1 radi
2. M=N
3. Ako je A[i] = i
4. M=M-1
5. vrati M
#include <iostream>
using namespace std;
1. Za i = 0..N
2. Ispiši A[i]
1. MM = M
2. Za i = 0..M/2-1 radi
3. Sve dok je (A[k] = k) radi k = k + 1
4. pom = A[k]
5. A[k] = A[A[k]]
6. Ako je A[k] = k onda MM = MM – 1
7. A[pom] = pom
8. MM = MM – 1
9. k=k+1
10. M = MM
1. Za i=0..k
2. i = RND(0..N-1)
3. j = RND(0..N-1)
4. pom = A[i]
5. A[i] = A[j]
6. A[j] = pom
1. Radi
2. Učitaj N
3. sve dok je N<1
4. Alociraj polje A duljine N
5. Za I = 0..N-1 radi
6. A[i] = i
7. Mijesanje(A,N, 1000)
8. M = Init(A,N)
9. Ispis(A,N)
10. Sve dok je M>0 radi
11. Razmjena(A,N,&M)
12. Ispis(A,N)
int main () {
srand(time(0));
int N;
do {
cout << "N = ";
cin >> N;
} while (N<1);
int *A = new int [N];
for (int i = 0; i < N; i++) A[i] = i;
Mijesanje(A, N, 1000);
int M = Init(A, N);
Ispis(A,N);
while (M>0) {
Razmjena(A,N,&M);
Ispis(A,N);
}
system("pause");
return 0;
}
N N!
K K!(N K )!
1. BinCoef(N,K)
2. Ako je N=0 ili K=0 ili K=N vrati 1
3. inače vrati BinCoef(N-1,K)+BinCoef(N-1,K-1)
#include <iostream>
using namespace std;
int main () {
int N,K;
do {
cout << "N = ";
cin >> N;
cout << "K = ";
cin >> K;
} while (N<K ||N<0 || K<0);
cout << N << endl;
cout << "\t = " << BinCoef(N,K) << endl;
cout << K << endl;
system("pause");
return 0;
}
N N N N N 1 N N
(a b)N aN aN 1b aN 2b2 ab b
0 1 2 N 1 N
Pri izračunu je zabranjeno koristiti biblioteku cmath.