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: