1 van 1

C++ reeks som

Geplaatst: do 14 jan 2010, 18:12
door kilon
ik zit met het volgende probleem:
Lees een geheel getal s tussen 1 en 10000, en bepaal alle rijen van opeenvolgende positieve gehele getallen waarvan de som s is.

Bijvoorbeeld, voor s=9993 geldt:

9993 = 1663 + 1664 + 1665 + 1666 + 1667 + 1668

9993 = 3330 + 3331 + 3332

9993 = 4996 + 4997

Bij het afdrukken van de resultaten is het voldoende het eerste en laatste getal van elke rij af te drukken.
Ik heb nog niet heel erg veel met c++ gewerkt, maar basisfuncties ken ik wel.

Maar hoe pak ik dit nu aan?

Re: C++ reeks som

Geplaatst: do 14 jan 2010, 18:51
door jhnbk
Je al twee lussen nodig hebben met een waarde begin en een waarde einde.

Begin loopt van 1 tot het maximum getal terwijl einde loopt van begin tot de som (tussen begin in einde) groter is dan het gegeven getal.

Re: C++ reeks som

Geplaatst: do 14 jan 2010, 19:12
door jhnbk
Je krijgt dus een code zoals dit:

Code: Selecteer alles

#include <iostream>



using namespace std;



int main()

{

	int getal;

	int i,j,som;

	cin >> getal;

	for (int i=1;i<=getal/2;i++){

		// aan te vullen :D

		for (int j=i+1;som<=getal;j++){

				 //aan te vullen :D

		}

	}

	return 0;

}
Maar het word je uiteraard niet cadeau gegeven :eusa_whistle:

Re: C++ reeks som

Geplaatst: do 14 jan 2010, 20:12
door Cycloon
Ik denk eerlijk gezegd wel dat het net iets moeilijker is dan 2 for lusjes :eusa_whistle:

Re: C++ reeks som

Geplaatst: do 14 jan 2010, 20:35
door 317070
Ik denk eerlijk gezegd wel dat het net iets moeilijker is dan 2 for lusjes
Nee, is perfect mogelijk in 2 for-lusjes :eusa_whistle:

Re: C++ reeks som

Geplaatst: do 14 jan 2010, 22:25
door kilon
Is dat zo?

Het is nu eigenlijk meer wiskunde dan programmeren, maar ik weet echt niet wat ik nou moet invullen.

Re: C++ reeks som

Geplaatst: do 14 jan 2010, 23:03
door 317070
Het is nu eigenlijk meer wiskunde dan programmeren, maar ik weet echt niet wat ik nou moet invullen.
Probeer eens brute-force. Loop alle mogelijke rijen af, en kijk welke er kloppen...

Nu kun je snel iets vinden waarmee je niet echt álles moet overlopen, maar snel veel mogelijke rijtjes kunt uitsluiten.

Re: C++ reeks som

Geplaatst: vr 15 jan 2010, 08:35
door jhnbk
Ik denk eerlijk gezegd wel dat het net iets moeilijker is dan 2 for lusjes :eusa_whistle:
Perfect mogelijk. Ik heb de code hier al getest en het werkt perfect. Ik stel voor dat we Kilon nog wat laten proberen.

Re: C++ reeks som

Geplaatst: vr 15 jan 2010, 13:43
door kilon
Tja, dit heb ik nu maar ik weet echt niet hoe het nu verder moet.

Code: Selecteer alles

#include <iostream>

using namespace std;	   

int main(void)

{

//Declaraties

int som, i, j, k(i);	 

cout << "Voer een geheel getal tussen 1 en 10.000 in" << endl;

cin >> som;

if (som <=0 || som >10000)

{

cout << "Dit is geen geschikte waarde." << endl;

cout << "Het programma wordt afgesloten." << endl;

exit(1);

}

for (i=0; i < som/2+1; ++i)

{

i = 0;

j = i+1;

for (j=i; j <= som/2+2; ++j)

{

j=i+1;

k = j+1;

   

if (j==som)

{

   //wat moet hier? 

}

else if (j>som)

{

 break;

} 

}

}

  //En hoe print ik nou alle mogelijke reeksen?

system("PAUSE"); 

return EXIT_SUCCESS;

}

Re: C++ reeks som

Geplaatst: vr 15 jan 2010, 13:47
door jhnbk
Bijvoorbeeld

Code: Selecteer alles

#include <iostream>



using namespace std;



int main()

{

	int getal;

	int i,j,som;

	cin >> getal;

	for (int i=1;i<=getal/2;i++){

		som=i;

		for (int j=i+1;som<=getal;j++){

				 //zie commentaar

		}

	}

	return 0;

}
som=som+j

controleer of som=getal

indien ja => afdrukken i en j

Re: C++ reeks som

Geplaatst: vr 15 jan 2010, 14:08
door kilon
Ok, dat werkt!

Hartstikke bedankt!! :eusa_whistle:

Nu enkel nog even een net tabelletje ervan maken, maar dat lukt me wel.

Re: C++ reeks som

Geplaatst: vr 15 jan 2010, 14:09
door jhnbk
Opmerking: indien som = getal kan je alvast uit de binnenste lus springen met break

Re: C++ reeks som

Geplaatst: vr 15 jan 2010, 16:39
door Rogier
Voor bonuspunten: het kan ook met één for lus :eusa_whistle:

Re: C++ reeks som

Geplaatst: vr 15 jan 2010, 16:53
door jhnbk
Inderdaad! Lijkt mij een leuke uitdaging voor kilon :eusa_whistle: