Ik wil in VisualBasic een programma schijven dat van een gegeven letterreeks (een woord) alle mogelijk anagrammen geeft. Nu wilde ik hiervoor een n-tallig stelsel maken waarin n het aantal tekens van de reeks is.
Voorbeeld: Tom: T=0 o=1 m=2 Dus een 3-tallig stelsel.
Als ik dan in het n-tallig stelsel alle getallen van 0 tot nn achter elkaar zet, en de cijfers vervang door de gegeven tekens heb ik alle mogelijke opeenvolgingen van de tekens. Echter moeten dan wel alle dubbele (zoals 233=omm, dit is geen anagram van Tom) eruit, maar dat is wiskundig niet het meest complexe.
Mijn vraag is een algoritme waarmee ik een niet-10-tallig stelsel kan opbouwen. Ik werk in een programmeertaal dus iteratie en dergelijke zijn geen probleem.
Bij voorbaat dank Tom
Tom
Leerling bovenbouw havo-vwo - woensdag 15 juni 2005
Antwoord
Zoiets? (in Delphi):
var i,n: integer;
function base_10_to_base_basis(getal,basis:integer):string; var s:string; begin s:=''; while getal0 do begin s:=inttostr(getal mod basis)+s; getal:=getal div basis end; base_10_to_base_basis:=s; end;
begin n:=4; for i:=1 to trunc(power(n,n))-1 do memo1.lines.add(base_10_to_base_basis(i,n)) end;