Problem Józefa Flawiusza)
Napisz procedurę Flawiusz(var l:lista; k:integer), która dla danego k
> 0 i niepustej cyklicznej listy l, cyklicznie usuwa co k-ty element
listy l, aż pozostanie w niej tylko jeden element. Liczenie rozpoczynamy
od elementu wskazywanego przez l.
Rozwiązanie 1
[schowaj]
procedure Flawiusz(var l:lista; k:integer);
//Usuwamy z listy l cyklicznie co k-ty element dopóki nie zostanie jeden
element; k>0, l niepusta cykliczna
var poprz, pom: lista;
begin
poprz:=l^.nast;
while poprz^.nast <> l do poprz:=poprz^.nast; //poprz wskazuje
na element poprzedzający l
while poprz <> poprz^.nast do begin //dopóki lista
ma więcej niz jeden element
for i:=1 to k-1 do poprz:=poprz^.nast;
pom:=poprz^.nast;
poprz^.nast:=pom^.nast;
dispose(pom);
end;
l:=poprz;
end;
clude
#include
#include
#include
#include
using namespace std;
int main()
{
int n, m, k;
int b =0;
int d=0;
int usuwamy [500];
int wygrani [500];
queue kolo;
while(true)
{
b=0;
d=0;
cin>>n; //wszyscy
if(n==0) break;
cin>>m; //wybrani
cin>>k; //od ktorego usuwamy
if(n<0 || m<0 || k<0) break;
if(m>n || k>n) break;
if(n==m)
{
cout< for(int y=1; y {
if(y==m)
{cout< else
{cout< }
}
else
{
for(int i=1; i for(int a=1; a {
int poczatek=kolo.front();
kolo.pop();
kolo.push(poczatek);
}
usuwamy[b] = kolo.front();
b++;
kolo.pop();
while(kolo.size()>m)
{
for(int c=0; c {
int poczatek2=kolo.front();
kolo.pop();
kolo.push(poczatek2);
}
usuwamy[b]=kolo.front();
b++;
kolo.pop();
}
for(int c=0; c {
wygrani[d] = kolo.front();
d++;
kolo.pop();
}
sort( wygrani, wygrani+m);
for(int e=0; e {
if(e==b-1)
cout< else
cout< }
for(int f=0; f {
if(f==m-1)
cout< else
cout< }
}
}
return 0;
}
>
> http://www.csharp.pl/viewtopic.php?f=4&t=437&start=0
Wyszukiwarka
Podobne podstrony:
Flawiusz Wojna żydowska
Flawiusz Arrian Indica
Flawiusz Przeciw Apionowi
więcej podobnych podstron