vraag som van rij opeenvolgede getallen

Status
Niet open voor verdere reacties.

kilon666

Gebruiker
Lid geworden
19 dec 2009
Berichten
19
Voor mijn studie zijn we net begonnen met C++ maar nu zit ik 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?
 
verschillende manieren, dit is niet echt persé een vraag voor C++ though of C.

Je moet een algoritme verzinnen waarbij X opeenvolgende getallen het getal Y vormen.

Ik doe dat altijd door een stappen schema te maken (een algoritme te bedenken)

Dit is een heel erg memory intensief algoritme maar simpel te bedenken
Deze heb ik ff in 5 min in C# geschreven. Er zijn natuurlijk veel efficientere algoritmes.
Code:
static void Main(string[] args)
        {
            int X = 1000;
            for (int i = 0; i < (X / 2) + 1; i++)
            {
                int Y = 0;
                int Z = i;
                while (Y < X)
                {
                    Y += Z;
                    Z += 1;
                    
                }
                if (Y == X)
                {
                    Z = i;
                    Y = 0;
                    string Solution = "";
                    while (Y < X)
                    {
                        Solution += Z.ToString() + " ";
                        Y += Z;
                        Z += 1;
                    }
                    Console.WriteLine("Found: " + Solution);
                }
            }
            Console.Read();
        }
 
Ik heb nu ook nog een meer wiskundige manier gevonden.

Hierbij krijg je de priemfactoren: Bijvoorbeeld van 999: 3,3,3,37
Dan zijn er 8 reeksen met negatieve getallen : want 4 * 2 = 8 (deze getallen zijn van 3^3 * 37^1 en (3 + 1) * (1 + 1) = 8)
Dit hierboven is een wiskundig trukje!.

Dan voor elke deler K (zie hier boven, dat zijn er dus 8), doe:
(999 / 2K) - (K - 0.5) tot (999 / 2K) + (K - 0.5) is een reeks.
Succes.
 
Ik kom er niet uit.
Zou iemand in C++ kunnen zeggen hoe het moet.
Alles wat ik weet is dat je 2 for-loops nodig hebt.
 
Ik zou in dit geval voor een while lus in een for lus gaan, maar goed, het principe is ongeveer als volgt:

  1. eindgetal inlezen
  2. for lus starten: deze loopt van 1 tot aan de helft van het ingelezen eindgetal (eindgetal/2 + eindgetal/2+1 is altijd meer dan eindgetal)
  3. while lus starten: zolang een bepaalde variabele (som) strikt kleiner is dan eindgetal, tel het volgende getal bij de som op
  4. nakijken of som gelijk is aan eindgetal: als dat zo is hebben we een reeks gevonden, geef startgetal en eindgetal van de whilelus weer (startgetal is teller van de forlus die errond ligt, eindgetal is waarde van de teller van de whilelus op dit punt), als dat niet zo is doen we gewoon verder

Als je er niet uitkomt, post dan eens de code die je gemaakt hebt aan de hand van bovenstaande uitleg, dan gaan we vanaf daar wel verder ;)
 
whow :P ik dacht dat ik de beginners fase wel beetje gepasseerd was :S maar dis egt hocus spookus voor mij :O

heb je miss een titel voor me waar je dit in leert ? ik wil ook wat meer gaan schrijven. dus wil dit eigenlijk wel beetje snappen :P anders gaat later me game programming nie lukke denk ik :P
 
Ik kom er niet uit.
Zou iemand in C++ kunnen zeggen hoe het moet.
Alles wat ik weet is dat je 2 for-loops nodig hebt.

Uuhm Kilon666 zo ik de oplossingen mogen weten aub :D want ik heb het nodig vr een vakantie taak :s:d
 
Uuhm Kilon666 zo ik de oplossingen mogen weten aub :D want ik heb het nodig vr een vakantie taak :s:d

maak even een eigen vraag aan voor jou probleem.
deze gaat op slot.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan