Just nu i M3-nätverket
Gå till innehåll

Algoritm


m a r c u s

Rekommendera Poster

Banorna i en simbassäng är åtta till antalet. Dessa kan vara lediga (0) eller upptagna (1). Detta kan representeras med åtta bitar, eller ett tal mellan 0-255. Bana 1 upptagen = 1, bana 2-3 upptagna = 6, etc.

 

Givet detta tal vill jag få en textstäng som visar vilka banor som är upptagna.

Ex 1: 1-2, 4

Ex 2: 2-4, 6-7

 

I VBScript naturligtvis...

 

Om någon kunde hjälpa mig vore jag väldigt tacksam!

Länk till kommentar
Dela på andra webbplatser

Är talet 128 eller högre? Dra i så fall bort 128 och notera att bana 8 är upptagen. Annars är bana 8 ledig. Är talet nu 64 eller högre? Dra i så fall bort 64 och notera att bana 7 är upptagen. Annars är bana 7 ledig. Är talet nu 32 eller högre? Tja, då borde du förstå principen :-)

 

128, 64, 32, 16, 8, 4, 2, 1 (hälften hela tiden).

 

 

Länk till kommentar
Dela på andra webbplatser

Jo, så lång hade jag kommit, men det var egentligen inte där problemet låg. Svårigheten ligger i att skapa textsträngen, formaterad enligt ovan.

 

Följande kod finner upptagna banor.

 

For i = 7 To 0 Step -1

If n >= 2^i Then

'Bana (i+1) upptagen

n = n - 2^i

End If

Next

 

Beklagar otydligheten.

 

 

Länk till kommentar
Dela på andra webbplatser

Två sätt jag kommer på spontant är antingen (a) rekursiv funktion, eller (B) mellanlagring.

 

Med hjälp av rekursiv funktion kan du ju få resultatet att skrivas ut "baklänges", dvs från bana 1 och framåt, och då kan du ju kolla vilken bana som nyss var ledig för att därigenom veta om du ska sätta ut bindestreck.

 

Om du istället väljer metod b så får du skapa en array som din loop lagrar banornas status i. Sen kan du ju gå igenom din loop i rätt ordning.

 

 

Länk till kommentar
Dela på andra webbplatser

Tjena!

 

Såhär får man göra för att formatera textsträngen:

 

<%
n = 211
Response.write("Bokade: ")
y = 0
for x = 0 to 7
if ((n and 2^x) = 2^x) then
	if (y > 0) then
		if (y = 1) then
			Response.write("-")
		end if
	else
		Response.write(x)
	end if
	y = y + 1
else
	if (y > 1) then
		Response.write(x-1)
	end if
	if (y >= 1 and 2^x < n) then
		Response.write(", ")
	end if
	y = 0
end if
next
if (y > 0) then Response.write(7)
%>

 

/ Johan

 

[inlägget ändrat 2002-09-08 13:29:27 av Nollis]

Länk till kommentar
Dela på andra webbplatser

Arkiverat

Det här ämnet är nu arkiverat och är stängt för ytterligare svar.

×
×
  • Skapa nytt...