Gå til innhold

Brute force - Pytagoras - Er denne grei?


Anbefalte innlegg

Her har jeg prøvd å lage et program som skal teste alle mulighetene ift Pytogoras setning, hvor max lengder på sidene er 500. Programmet funker som bare det, men jeg er usikker på om dette er riktig, siden jeg ikke har noe fasit å sjekke.

 

Sjekker programmet mitt faktisk alle mulighetene fra "sidelengder" = 1 til 500?

 

 

public class ToTre
{
// executing main method:
public static void main( String args[] )
{
 // set and initialize integer:
 int result = 0;
 int solutions = 0;
 
 // loop for side1:
 for ( int side1 = 1; side1 <= 500; side1++ )
 {
 	// loop for side2:
 	for ( int side2 = 1; side2 <= side1; side2++ )
 	{
   // loop for hypotenuse:
   for ( int hypotenuse = 1; hypotenuse <= 500; hypotenuse++ )
   	{
   	// if side1
   	if (((side1 * side1) + (side2 * side2) ) == ( hypotenuse * hypotenuse ) )
   	{
     result = ((side1 * side1) + (side2 * side2) );
     System.out.printf(
       "\n%d\n", result );
     
     // increment number of solutions:
     ++solutions;
     
   	} // end if
               	
   	} // end inner for
 	} // end for
 } // end outer for
 
 // print number of solutions for user:
 System.out.printf( "\nNumber of solutions are: %d\n", solutions );
 
} // end main method
 
} // end class ToTre

Lenke til kommentar
Videoannonse
Annonse
Her har jeg prøvd å lage et program som skal teste alle mulighetene ift Pytogoras setning, hvor max lengder på sidene er 500. Programmet funker som bare det, men jeg er usikker på om dette er riktig, siden jeg ikke har noe fasit å sjekke.

 

Sjekker programmet mitt faktisk alle mulighetene fra "sidelengder" = 1 til 500?

 

8098719[/snapback]

Altså for det første så er det uvisst hva du mener med "muligheter". I tillegg så bruker du jo bare int i programmet ditt og hopper effektivt over den uendlige rekken av tall som ligger mellom f.eks. 1 og 2. Sånn sett så er det ikke mulig å beregne alle muligheter (man ville vel strengt tatt brukt den matematiske operatøren for uendelig).

 

Skulle vi likevel begrense hos til at man kan øke sidene med 1 om gangen (diskret mattematikk passer jo bra for datamaskiner) ser jeg at du har et merkelig forhold mellom side1 og side2.

 

Du looper side 1 fra 1 til 500, og man ville trodde at du kanskje ønsket å gjøre det for side2 også men du har en begresning der og vil ikke la side2 være støre enn side1, noe den naturligvis kunne være i "virkeligheten".

 

F.eks en trekant med en katet hvor lengden på side1 er 10 og lengden på side2 er 500.

Lenke til kommentar
Du looper side 1 fra 1 til 500, og man ville trodde at du kanskje ønsket å gjøre det for side2 også men du har en begresning der og vil ikke la side2 være støre enn side1, noe den naturligvis kunne være i "virkeligheten".

 

F.eks en trekant med en katet hvor lengden på side1 er 10 og lengden på side2 er 500.

8100105[/snapback]

Dersom det er samme hva som er side1 og side2, vil han jo med dette unngå å få side1=10 og side2=500 som en løsning og side2=500 og side2=10 som en annen løsning. Men det er ikke sikkert er det samme for han - spørs problemstillingen.

Lenke til kommentar

Få endringer... men den fungerer bedre nå.

Alt jeg trengte var å fjerne en brace ( "{" ) eller to...

 

Klikk for å se/fjerne innholdet nedenfor
public class ToTre
{
// executing main method:
public static void main( String args[] )
{
 // set and initialize integer:
 int result = 0;
 int solutions = 0;
 
 // loop for side1:
 for ( int side1 = 1; side1 <= 500; side1++ )
 {
 	// loop for side2:
 	for ( int side2 = 1; side2 <= 500; side2++ )
 	
 	// loop for hypotenuse:
 	for ( int hypotenuse = 1; hypotenuse <= 500; hypotenuse++ )
 	{
   // if side1² + side2² = hypotenuse² ...
   if (((side1 * side1) + (side2 * side2) ) == ( hypotenuse * hypotenuse ) )
   {	
   	// ... then calculate:
   	result = ( hypotenuse * hypotenuse );
     
   	// display each result if "if" = true:
   	System.out.printf(
     	"\n%d\n", result );
   } // end if
   
   // increment number of solutions:
   ++solutions;
   
 	} // end inner for
 } // end outer for
 
 // print number of solutions for user:
 System.out.printf( "\nNumber of solutions are: %d\n", solutions );
 
} // end main method
 
} // end class ToTre

 

...og alle sidene skal ha 500 som begrensing. Ja, heltall gjorde det lettere.

Endret av Sti9nsky
Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...