» »

[Naloga][C++] - Hišne številke

[Naloga][C++] - Hišne številke

jernejf ::

LP!
Pripravljam se za kolokvij in imam težave pri eni nalogi. Upam da mi malo namignete.
Text-

Profesor Modrinjak stanuje v razmeroma dolgi ulici. Hišna številka hiše v kateri je profesor doma, je tromestna in ima zanimivo lastnost, da je vsota vseh hišnih številk v ulici, ki so manjše od nje, enaka vsoti večjih. Določi hišno številko in število hiš v ulici!

In še kaj sem jaz ustvarjal:
int main()
{
   int n;
   int i = 0;
   int j ;
   int vsotai = 0;
   int vsotaj = 0;
   
   do{
    i++;
    j++;
    
    vsotai += i;
    vsotaj += j;
            }while(vsotai != vsotaj);

     cout   n  endl;
    
 system("PAUSE");   
 return 0;   
}


Vem približno kje je napaka---nisem določil da gre i do n-ja , j pa od n-ja do konca-(dokler pač vsoti nebosta enaki)

Prosim za mali namig:\
LP!
  • spremenilo: CCfly ()

Fury ::

Brute force lahko tko naredis da zacnes sestevat pri 100 (ker ves, da je 3mestna stevilka), pol pa za vsakic ko povecas spodnjo vsoto rekalkuliras zgornjo dokler ne presezes ali izenacis spodnje. Ce presezes potem ni valid, ce je enaka si jo nasel. Pazi da preskocis hiso od profesorja :) ker pise vsota manjsih in vsota vecjih - torej ne stejes profesorjeve v nobeno vsoto.

jernejf ::

Ja saj tako da sem sešteval od 100 naprej sem že tudi poskusil. Takrat sem samo prištel vsoto do 100 (4950).

"vsakic ko povecas spodnjo vsoto rekalkuliras zgornjo"
Ta del mi ni čisto jasen(kaj sploh pomeni rekalkolirati):\
a ni to takol:
vsotai += i;
vsotaj += j;
}while(vsotai != vsotaj);
Hvala še enkrat

Alpheus ::

No jaz sem se tudi malo poigral s tem in prišel do naslednjega zaključka:

Hišna št. profesorja: 204, št. hiš: 288. Spisal sem pa program takole:

#include <iostream>
using namespace std;

int main()
{
	int hisna = 99; // zacetek
	int st_his = 0;
	int i = 0;
	int vsota_manjsih = 0;
	int vsota_vecjih = 0;
	bool pogoj = true;
     
	while (pogoj)
	{
		hisna++;
		if (hisna == 999) pogoj = false;
		vsota_manjsih = (hisna-1)*hisna/2;
		
		i = hisna;
		vsota_vecjih = 0;
		while (vsota_vecjih < vsota_manjsih)
		{
			i++;
			vsota_vecjih += i;
			st_his = i;
			if (vsota_vecjih == vsota_manjsih) pogoj = false;
		}
	}
	 
	cout << "Hisna stevilka profesorja Modrinjaka: " << hisna << endl;
	cout << "Stevilo his v ulici: " << st_his << endl;
     
	system("PAUSE");
	return 0;
}


V bistvu je tole brute-force metoda, ki jo je Fury omenil. Če hočeš matematično rešitev, je tudi precej enostavno. Nasvet: aritmetična vrsta (sicer boš moral v kodi kvadratno enačbo reševat)
VI VERI VENIVERSUM VIVUS VICI.

Zgodovina sprememb…

  • spremenil: Alpheus ()

jernejf ::

Hvala vama:)
Za to brute-force metodo nisem še nkol slišal...si bom mal pogledal zaj.
Sicer pa z aritmetično vrsto vem da se da zračunat samo sem si mislil da je verjetno mišljeno da se naloga reši "programersko":))

Hvala vama
LP!

Alpheus ::

V bistvu gre pri brute-force metodah za reševanje s poskusi in napakami, pač mu daš en določen interval na kerem naj išče, pa ti pregleda vse možnosti, ko najde pravo, se ustavi in ti javi rešitev. Tradicionalen način bi bil rešit matematično, ker gre za za nalogo z eno samo rešitvo brez parametrov, za to ni potrebna v bistvu funkcija, tako da več ali manj nardiš zgoraj omenjen program tolk da pokažeš da veš.
VI VERI VENIVERSUM VIVUS VICI.


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

Vsota določenih elementov matrike [C]

Oddelek: Programiranje
10993 (681) RatedR
»

programiranje krožek(pomoč)

Oddelek: Pomoč in nasveti
442754 (1742) Marat
»

[C] Vsota števil v polju

Oddelek: Programiranje
51270 (1208) Cvenemir

[C#]naloga iz metod!

Oddelek: Programiranje
81658 (1491) Ziga Dolhar
»

Pomoc pri nalogi

Oddelek: Programiranje
152006 (1812) FuI2cY

Več podobnih tem