2016-05-06 7 views
-1

Die Fläche ist eine ganze Zahl.Bei einem gegebenen Bereich die Seiten eines Rechtecks ​​so berechnen, dass sie eine ähnliche Länge haben.

Gegeben eine Fläche, ich möchte Quadrate zeichnen, die Quadratmeter darstellen. So möchte ich zum Beispiel bei einem Bereich von 30 ein Rechteck von 6 x 5 oder 5 x 6 zeichnen, aber nicht eines von 2 x 15, weil das zu lang und dünn aussehen würde.

Ich kann auch akzeptieren, weniger Quadrate in der letzten Reihe zu zeichnen, also zum Beispiel für eine 33 Fläche, kann ich 6 x 5 Rechteck und eine letzte Reihe von 3 Quadraten zeichnen.

Ich versuchte Primfaktorzerlegung, aber zum Beispiel für 597 bekomme ich 3 und 199, zu lang und dünn.

habe ich versucht, quadratische Funktion, unter Verwendung der Formel

0 = x^2 + x - area 

So würde ich die positive Lösung als eine der Seiten verwendet wird, und die andere Seite würde 1 Einheit länger sein.

Aber ich bekomme kein ganzzahliges Ergebnis, und Abrunden oder Verkleinern verändert den resultierenden Bereich.

Irgendwelche anderen Ideen? Gibt es einen bekannten Algorithmus dafür? Diese Frage: Fastest way to calculate rectangle sides from area? wurde geschlossen, aber ich denke, das ist eine gültige Frage.

Antwort

1

Berechnen Sie die Quadratwurzel des Bereichs; runde es auf und ab für deine Seiten. Wenn das zu klein ist, stoßen den kleineren Wert bis 1.

. Beispiele:

  • sqrt (30) = 5 ???, so erhalten wir 5 & 6 und 5x6 = 30
  • sqrt (36) = 6, so erhalten wir 6x6 = 36
  • sqrt (48) = 6. ???, so erhalten wir 6 & 7 und 6x7 = 42. Bump es zu 7x7 = 49, und die letzte Zeile hat 1 Quadrat (die Sie sagten, war akzeptabel).
0

Unter der Annahme, dass Sie die nächste Form vorziehen zu quadrieren, können Sie mit Integer Teil sqrt (Bereich) beginnen und fügen Sie Breite und Höhe einer nach dem anderen:

width=[sqrt(area)] // Integer part of Square root 
heigh=width 
while ((height*width)<area){ 
    if (height<width) 
      {height=height+1} 
    else 
      {width=width+1} 
} 
+1

Kapitalisierung & Rechtschreibfehler –

+1

Während Dies funktioniert möglicherweise, fügen Sie bitte weitere Informationen zu Ihrer Antwort hinzu. Auch ist die Schleife irrelevant. 'sqrt (x) * sqrt (x) = x = sqrt (x²)' – cramopy

+0

Danke euch beiden. Der Startwert der Breite ist Integer Teil von sqrt (Bereich) nicht die genaue sqrt. Die Schleife funktioniert also, wenn der Bereich kein exaktes Quadrat @ creepopy ist –

Verwandte Themen