Just nu i M3-nätverket
Jump to content

Algoritm


m a r c u s

Recommended Posts

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!

Link to comment
Share on other sites

Ä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).

 

 

Link to comment
Share on other sites

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.

 

 

Link to comment
Share on other sites

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.

 

 

Link to comment
Share on other sites

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]

Link to comment
Share on other sites

Archived

This topic is now archived and is closed to further replies.

×
×
  • Create New...