Gå til innhold

ProgrammeringsBaren! Småprat, om det du elsker!


Anbefalte innlegg

Uff, å se på sin egen kode er frustrende til tider, hvertfall hvis den er blitt noen måneder eller år :) Ting som en gang var vakkert har ofte forfalt!
Hehe, tør knapt dra frem de gamle HTML og Visual Basic-kodene (blærgh) mine :p Endret av Rabbid
Lenke til kommentar
Videoannonse
Annonse

Cormen brukes ved NTNU :)

Cormen boken er en smule heavy og bruker mye av innholdet sitt til å gjøre kjøretidsanalyser for algoritmene som blir gjennomgått.

Jeg synes cormen var ganske bra.. Du kan jo bare hoppe over kjøretids-analysene hvis du ikke er interessert i dem. Dessuten har han jo lagt opp til at enkelt kapitler kan leses uavhengig av andre, ganske kjekt spør du meg.
Lenke til kommentar

Her er hele oppgaven:

 

Each new term in the Fibonacci sequence is generated by adding the previous two terms. By starting with 1 and 2, the first 10 terms will be:

1, 2, 3, 5, 8, 13, 21, 34, 55, 89, ...

Find the sum of all the even-valued terms in the sequence which do not exceed four million.
Note: This problem has been changed recently, please check that you are using the right parameters.

 

Hvordan i svarte jobber jeg med så store tall?

Lenke til kommentar

Jeg fikk det til! :D

Oppgaven:

Each new term in the Fibonacci sequence is generated by adding the previous two terms. By starting with 1 and 2, the first 10 terms will be:

 

1, 2, 3, 5, 8, 13, 21, 34, 55, 89, ...

 

Find the sum of all the even-valued terms in the sequence which do not exceed four million.

Note: This problem has been changed recently, please check that you are using the right parameters.

 

Svar:

#include <iostream>
#include <unistd.h>
using std::cout; 
#define max 4000000 
int main()
{
int i = 0;
   	int buff1 = 0; 
int buff2 = 1; 
int main = 1; 
int svar = 0; 	
while(1)
{
i++; 
main = buff1 + buff2; 
if (main > max)
	{
		break; 
	}
//cout << main << "\n"; 
buff2 = buff1; 
buff1 = main; 
	if ((main & 1) == 0)
		{
			svar = svar + main; 
		}
}	
cout << svar << "\n"; 
}

Endret av data_jepp
Lenke til kommentar

Litt mye kode du har der :D

#include <iostream>
using namespace std;
#define max (unsigned long long)((unsigned int)-1)
int main()
{
unsigned int buffer = 0;
unsigned accum = 1;
do 
{
	accum += buffer;
	buffer = accum - buffer;
	cout << accum << endl;
}
while(((unsigned long long)accum) + ((unsigned long long)buffer) < max));
cin.get();
return 0;
}

Lenke til kommentar

Slemme mannen!!!! Away with you! Kommer her med din fancy pansy kode. :wee: Neida, jeg vet koden ikke er hardcorenoobinghaxxor opplegg. Men så skal det sies at jeg er på oppgave 2/183 for å nemlig å lære. Så slutt å brief og gi meg ros i stedet :wee:

 

Neste oppgaven da:

The prime factors of 13195 are 5, 7, 13 and 29.

What is the largest prime factor of the number 600851475143 ?

 

Jeg finner ingen datatype som er stor nok for det tallet, hvordan kan jeg gå fram da?

Endret av data_jepp
Lenke til kommentar
Jeg finner ingen datatype som er stor nok for det tallet, hvordan kan jeg gå fram da?

 

Dette er jo et puslete tall. En 64-bits integer klarer fint å holde på denne.

 

Eller du kan bruke et språk som ikke bryr seg om slik kjedelige detaljer som bredden på tallet ditt og som heller bytter til riktige datatyper etterhvert som tallet ditt vokser (gjerne forbi 64 bit også).

Endret av steingrim
Lenke til kommentar

429496729 (som max-verdi for en unsigned long) er nok litt mindre enn 600851475143 derfor må du over til en long long som ofte er 64 bit.

 

Husk å putte på riktig suffix slik at konstanten din ikke blir en long, men en long long, altså 600851475143LL.

Lenke til kommentar
Litt mye kode du har der inv_biggrin.gif

#include <iostream>
using namespace std;
#define max (unsigned long long)((unsigned int)-1)
int main()
{
unsigned int buffer = 0;
unsigned accum = 1;
do
{
	accum += buffer;
	buffer = accum - buffer;
	cout << accum << endl;
}
while(((unsigned long long)accum) + ((unsigned long long)buffer) < max));
cin.get();
return 0;
}

Litt mye kode der :) hehe neida, men oppgaven var ikke å finne alle fibonaccitallene under 4 mill altså, eller prøvde du ikke å løse oppgaven? :)

Prelude> let fibs = 1:1:zipWith (+) fibs (tail fibs)
Prelude> sum $ filter even $ takeWhile (< 4000000) fibs
4613732

Endret av teflonpanne
Lenke til kommentar

Den lengste versjonen :new_woot:

<html><head></head>
<body id="body">
<h1>fibonacci test:</h1>
<script type="application/javascript;version=1.7">
var output = document.getElementById("body");
var fibGen = function() {
  var n1 = 0, n2 = 1;
  while(true) {
  if((n2 % 2) == 0) {
	 output.appendChild(document.createTextNode(" " + n2));
	 yield n1;
  }
  n2 += n1;
  n1 = n2 - n1;
  }
}();

while(fibGen.next() < 1e300) {
}
</script></body></html>

 

Angående javascript/web... kan noen forklare meg logikken i at en kan åpne fildialoger og sende filer til server, men at disse ikke kan behandles direkte i browseren? Utrolig kjipt å måtte "sprette" filer mellom klienten og serveren.

Lenke til kommentar
Litt mye kode der :) hehe neida, men oppgaven var ikke å finne alle fibonaccitallene under 4 mill altså, eller prøvde du ikke å løse oppgaven? :)

Prelude> let fibs = 1:1:zipWith (+) fibs (tail fibs)
Prelude> sum $ filter even $ takeWhile (< 4000000) fibs
4613732

Skrev bare en kortere fib funksjon :) og gjøre den litt vanskeligere å lese så jeg så litt flinkere ut en jeg er :blush:

Lenke til kommentar

Er ferdig med enda en oppgave:

The prime factors of 13195 are 5, 7, 13 and 29.
What is the largest prime factor of the number 600851475143 ?

 

Hvordan ville dere løst denne?

 

Poster min kode, er åpen for hvordan den kan optimeres mer:

Klikk for å se/fjerne innholdet nedenfor

#include <iostream>
#include <math.h>
using std::cout;  
bool IsPrime(int); 
int main()
{
long long real =  600851475143LL;
for (long long i=2LL; real > 1; i++)
{
	if ((IsPrime(i)==1) && (real % i == 0))
	{
		cout << i << "\n"; 
		real = real / i; 
	}
}
return 0; 
}
bool IsPrime (int num)
{
if (num == 2)		 
	return true;
else if (num % 2 == 0)	 
	return false;
else
{
	bool prime = true;
	int divisor = 3;
	int upperLimit = static_cast<int>(sqrt(num) + 1);
	while (divisor <= upperLimit)
	{
		if (num % divisor == 0)
			prime = false;
		divisor +=2;
	}
	return prime;
}
}

Endret av data_jepp
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...