Pereiti prie turinio

KTU forumo uždavinys


Rekomenduojami pranešimai

Sveiki, bandau spręsti vieną iš praėjusio KTU programuotojų forumo uždavinių.

 

http://forumas.ktu.lt/konkursai/File/2010_uzd/KaunasUzd2010.pdf

 

Gal kas turit idėjų pirmam ar kokiam kitam uždaviniui spręsti? Niekaip nesugalvoju, kaip sugeneruoti skaičius (max ar min) pirmam uždaviny.

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Na va, gera proga buvo prisiminti pascal'į. Jei kas žiūrės kodą ir pamatys, kad galima ką optimaliau padaryt, sakykit.

 

program bev;
 type mas = array[1..10] of integer;

 var k, s,
 	iki_kiek, nuo_kiek,
 	i, o, p, g, //kintamieji ciklams ir pan.
 	max, min, sum: longint;
 	nuo_kiek_sk: longint;
 	sk: mas;
 	bool: boolean;
begin
 //nuskaitysi nuo failo pats

 k   := 5;  //kiek skaitmenu
 s   := 10; //skaitmenu suma
 max := 0;
 min := 0;

 //suzinome nuo kokio skaicio iki kokio darysim cikla
 iki_kiek := 1;
 for i := 1 to k do
iki_kiek := 10 * iki_kiek;
 nuo_kiek := iki_kiek div 10;

 //darom cikla ir brute-forciname
 for i := nuo_kiek to (iki_kiek - 1) do
begin
   	o   		:= 1;
   	bool    	:= TRUE;
   	nuo_kiek_sk := i;

   	//gauname visus skaiciaus skaitmenis
   	while (nuo_kiek_sk > 0) do
     	begin
         	sk[o]   	:= nuo_kiek_sk mod 10;
         	nuo_kiek_sk := nuo_kiek_sk div 10;
         	o := o + 1; //pridedame vieneta
     	end;

   	//Patikrinam ar skaitmenys visi skirtingi
   	for p := 1 to k do
     	for g := p+1 to k do
       	if(sk[p] = sk[g]) then bool := FALSE;

   	//Jeigu skirtingi, bool bus TRUE ir tikrinam suma
   	if(bool) then
     	begin
         	sum := 0;
         	for p := 1 to k do
           	sum := sum + sk[p];

         	if (sum = s) then
           	begin
               	max := i;
               	if(min = 0) then min := i;
           	end;
     	end;
end;

 if(min > 0) then writeln(min, ' ',max)
 else writeln(':(');
 Readln;
end.

 

Truputį iškraipo kodo struktūrą...

Redagavo Tom
Nuoroda į pranešimą
Dalintis kituose puslapiuose

Dėkui, kad nepatingėjai. Tiesa, pabandžiau paleist ir nesuranda teisingai pvz su k = 4; s = 6.

program KTU_skaičiai;
 type mas = array[1..10] of integer;

 var k, s,
       iki_kiek, nuo_kiek,
       i, o, p, g, //kintamieji ciklams ir pan.
       max, min, sum,
       nuo_kiek_sk: longint;
       sk: mas;
       bool: boolean;
       df: text;
       nsk: mas;
begin
 readln(k, s);
 max := 0;
 min := 0;

 //Sužinome, nuo kokio skaičiaus iki kokio darysime ciklą
 iki_kiek := 1;
 for i := 1 to k do
   iki_kiek := 10 * iki_kiek;
 nuo_kiek := iki_kiek div 10;

 //darom cikla ir brute-forciname
 for i := nuo_kiek to iki_kiek - 1 do
   begin
     o := 1;
     bool := TRUE;
     nuo_kiek_sk := i;
       //gauname visus skaičiaus skaitmenis
       while nuo_kiek_sk > 0 do
         begin
           nsk[o] := nuo_kiek_sk mod 10;
           nuo_kiek_sk := nuo_kiek_sk div 10;
           o := o + 1; //pridedame vieneta
       end;

       //Patikrinam, ar visi skaitmenys skirtingi
       for p := 1 to k do
       for g := p+1 to k do
               if sk[p] = sk[g] then bool := FALSE;

       //Jeigu skirtingi, bool bus TRUE ir tikrinam sumą
       if bool then
         begin
           sum := 0;
           for p := 1 to k do
           sum := sum + sk[p];

           if sum = s then
             begin
               max := i;
               if min = 0 then min := i;
               end;
       end;
       end;

 if min > 0 then writeln(min, ' ',max)
 else writeln('Nėra');
 Readln;
end.

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Viskas kaip ir aišku, tik vieno dalyko nesupratau:

if min = 0 then min := i;

Skaičius yra iš reikiamo skaičiaus skaitmenų ir jo suma atitinka norimą. Pagal ką remiantis nustatoma, ar tas skaičius min ar max? Min pradžioje ir buvo nulis, o čia tikrinama, ar jis nulis, tai nulis ir bus, kaip kitaip gali būt? To kintamojo min lyg ir niekur prieš tai nekeičiame. Kaip tai reikia suprasti?

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Viskas kaip ir aišku, tik vieno dalyko nesupratau:

if min = 0 then min := i;

Skaičius yra iš reikiamo skaičiaus skaitmenų ir jo suma atitinka norimą. Pagal ką remiantis nustatoma, ar tas skaičius min ar max? Min pradžioje ir buvo nulis, o čia tikrinama, ar jis nulis, tai nulis ir bus, kaip kitaip gali būt? To kintamojo min lyg ir niekur prieš tai nekeičiame. Kaip tai reikia suprasti?

 

Min prieš programą yra nustatomas reikšmei 0. Taigi, pats pirmas skaičius, kuris tenkins visas užduoties sąlygas taps skaičiumi kažkokiu ir daugiau nebebus nulis.

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Prisijunkite prie diskusijos

Jūs galite rašyti dabar, o registruotis vėliau. Jeigu turite paskyrą, prisijunkite dabar, kad rašytumėte iš savo paskyros.

Svečias
Parašykite atsakymą...

×   Įdėta kaip raiškusis tekstas.   Atkurti formatavimą

  Only 75 emoji are allowed.

×   Nuorodos turinys įdėtas automatiškai.   Rodyti kaip įprastą nuorodą

×   Jūsų anksčiau įrašytas turinys buvo atkurtas.   Išvalyti redaktorių

×   You cannot paste images directly. Upload or insert images from URL.

Įkraunama...
  • Dabar naršo   0 narių

    Nei vienas registruotas narys šiuo metu nežiūri šio puslapio.

×
×
  • Pasirinkite naujai kuriamo turinio tipą...