Vamos por partes, si por ejemplo el numero de habitacion mas bajo es el 100 y el mas alto el 900, que te impide declarara un array como este:
Código Delphi
[-]
var
haocupada: array[100..900] of Boolean;
Si el problema es que entre el 100 y el 900 hay números de habitación que no se usan, no te preocupes, simplemente no lo uses. Una variable de tipo boolean ocupa solo 4 bytes en memoria, así que un array de, por ejemplo, 1000 elementos solo ocupa 4 kb, una pequeñez para un ordenador actual. Cualquier otra alternativa, probablemente requerirá mas calculo y por lo tanto mas gasto de recursos. A veces lo simple es mejor.
En cuanto a los de poner todos los elementos a false, puedes usar algo como esto:
Código Delphi
[-]
FillChar(haocupada,Sizeof(haocupada),#0);