Springen naar inhoud

C++ reeks som


  • Log in om te kunnen reageren

#1

kilon

    kilon


  • 0 - 25 berichten
  • 11 berichten
  • Gebruiker

Geplaatst op 14 januari 2010 - 18:12

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?

Dit forum kan gratis blijven vanwege banners als deze. Door te registeren zal de onderstaande banner overigens verdwijnen.

#2

jhnbk

    jhnbk


  • >5k berichten
  • 6905 berichten
  • VIP

Geplaatst op 14 januari 2010 - 18:51

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.

#3

jhnbk

    jhnbk


  • >5k berichten
  • 6905 berichten
  • VIP

Geplaatst op 14 januari 2010 - 19:12

Je krijgt dus een code zoals dit:
#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.

#4

Cycloon

    Cycloon


  • >1k berichten
  • 4810 berichten
  • VIP

Geplaatst op 14 januari 2010 - 20:12

Ik denk eerlijk gezegd wel dat het net iets moeilijker is dan 2 for lusjes :eusa_whistle:

#5

317070

    317070


  • >5k berichten
  • 5567 berichten
  • Moderator

Geplaatst op 14 januari 2010 - 20:35

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-

#6

kilon

    kilon


  • 0 - 25 berichten
  • 11 berichten
  • Gebruiker

Geplaatst op 14 januari 2010 - 22:25

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

#7

317070

    317070


  • >5k berichten
  • 5567 berichten
  • Moderator

Geplaatst op 14 januari 2010 - 23:03

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-

#8

jhnbk

    jhnbk


  • >5k berichten
  • 6905 berichten
  • VIP

Geplaatst op 15 januari 2010 - 08:35

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.

#9

kilon

    kilon


  • 0 - 25 berichten
  • 11 berichten
  • Gebruiker

Geplaatst op 15 januari 2010 - 13:43

Tja, dit heb ik nu maar ik weet echt niet hoe het nu verder moet.

#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;
}

#10

jhnbk

    jhnbk


  • >5k berichten
  • 6905 berichten
  • VIP

Geplaatst op 15 januari 2010 - 13:47

Bijvoorbeeld
#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.

#11

kilon

    kilon


  • 0 - 25 berichten
  • 11 berichten
  • Gebruiker

Geplaatst op 15 januari 2010 - 14:08

Ok, dat werkt!

Hartstikke bedankt!! :eusa_whistle:

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

#12

jhnbk

    jhnbk


  • >5k berichten
  • 6905 berichten
  • VIP

Geplaatst op 15 januari 2010 - 14:09

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.

#13

Rogier

    Rogier


  • >5k berichten
  • 5679 berichten
  • VIP

Geplaatst op 15 januari 2010 - 16:39

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.

#14

jhnbk

    jhnbk


  • >5k berichten
  • 6905 berichten
  • VIP

Geplaatst op 15 januari 2010 - 16:53

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.





0 gebruiker(s) lezen dit onderwerp

0 leden, 0 bezoekers, 0 anonieme gebruikers

Ook adverteren op onze website? Lees hier meer!

Gesponsorde vacatures

Vacatures