kilon
Artikelen: 0
Berichten: 11
Lid geworden op: do 14 jan 2010, 18:10

C++ reeks som

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?
Gebruikersavatar
jhnbk
Artikelen: 0
Berichten: 6.905
Lid geworden op: za 16 dec 2006, 09:10

Re: C++ reeks som

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.
Het vel van de beer kunnen verkopen vraagt moeite tenzij deze dood voor je neervalt. Die kans is echter klein dus moeten we zelf moeite doen.
Gebruikersavatar
jhnbk
Artikelen: 0
Berichten: 6.905
Lid geworden op: za 16 dec 2006, 09:10

Re: C++ reeks som

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:
Het vel van de beer kunnen verkopen vraagt moeite tenzij deze dood voor je neervalt. Die kans is echter klein dus moeten we zelf moeite doen.
Gebruikersavatar
Cycloon
Artikelen: 0
Berichten: 4.810
Lid geworden op: ma 24 jan 2005, 20:56

Re: C++ reeks som

Ik denk eerlijk gezegd wel dat het net iets moeilijker is dan 2 for lusjes :eusa_whistle:
Gebruikersavatar
317070
Artikelen: 0
Berichten: 5.609
Lid geworden op: za 28 feb 2009, 17:05

Re: C++ reeks som

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:
What it all comes down to, is that I haven't got it all figured out just yet

And I've got one hand in my pocket and the other one is giving the peace sign

-Alanis Morisette-
kilon
Artikelen: 0
Berichten: 11
Lid geworden op: do 14 jan 2010, 18:10

Re: C++ reeks som

Is dat zo?

Het is nu eigenlijk meer wiskunde dan programmeren, maar ik weet echt niet wat ik nou moet invullen.
Gebruikersavatar
317070
Artikelen: 0
Berichten: 5.609
Lid geworden op: za 28 feb 2009, 17:05

Re: C++ reeks som

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.
What it all comes down to, is that I haven't got it all figured out just yet

And I've got one hand in my pocket and the other one is giving the peace sign

-Alanis Morisette-
Gebruikersavatar
jhnbk
Artikelen: 0
Berichten: 6.905
Lid geworden op: za 16 dec 2006, 09:10

Re: C++ reeks som

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.
Het vel van de beer kunnen verkopen vraagt moeite tenzij deze dood voor je neervalt. Die kans is echter klein dus moeten we zelf moeite doen.
kilon
Artikelen: 0
Berichten: 11
Lid geworden op: do 14 jan 2010, 18:10

Re: C++ reeks som

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;

}
Gebruikersavatar
jhnbk
Artikelen: 0
Berichten: 6.905
Lid geworden op: za 16 dec 2006, 09:10

Re: C++ reeks som

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
Het vel van de beer kunnen verkopen vraagt moeite tenzij deze dood voor je neervalt. Die kans is echter klein dus moeten we zelf moeite doen.
kilon
Artikelen: 0
Berichten: 11
Lid geworden op: do 14 jan 2010, 18:10

Re: C++ reeks som

Ok, dat werkt!

Hartstikke bedankt!! :eusa_whistle:

Nu enkel nog even een net tabelletje ervan maken, maar dat lukt me wel.
Gebruikersavatar
jhnbk
Artikelen: 0
Berichten: 6.905
Lid geworden op: za 16 dec 2006, 09:10

Re: C++ reeks som

Opmerking: indien som = getal kan je alvast uit de binnenste lus springen met break
Het vel van de beer kunnen verkopen vraagt moeite tenzij deze dood voor je neervalt. Die kans is echter klein dus moeten we zelf moeite doen.
Gebruikersavatar
Rogier
Artikelen: 0
Berichten: 5.679
Lid geworden op: di 27 apr 2004, 13:40

Re: C++ reeks som

Voor bonuspunten: het kan ook met één for lus :eusa_whistle:
In theory, there's no difference between theory and practice. In practice, there is.
Gebruikersavatar
jhnbk
Artikelen: 0
Berichten: 6.905
Lid geworden op: za 16 dec 2006, 09:10

Re: C++ reeks som

Inderdaad! Lijkt mij een leuke uitdaging voor kilon :eusa_whistle:
Het vel van de beer kunnen verkopen vraagt moeite tenzij deze dood voor je neervalt. Die kans is echter klein dus moeten we zelf moeite doen.

Terug naar “Informatica en programmeren”