Jump to content
php.lv forumi

programmēšanas olimpiāde


laucinieks

Recommended Posts

  • Replies 55
  • Created
  • Last Reply

Top Posters In This Topic

Hmm, esmu diezgan pamatīgi jau noīsinājis kodu, bet tāpat 3 punkti :D vaļā vērt un skatīties codez risinājumu vēl nav gribēšana (tas ir labi :D), tātad pašlaik kods izskatās - http://paste.php.lv/...4f4362?lang=cpp

Izskatās, ka būs jādomā kā savādāk aprēķināt to skaitļu summu un reizinājumu.

L.

 

EDIT: Tiku vaļā no 2 rindiņām cipreiz - http://paste.php.lv/...fa03e6?lang=cpp

 

EDIT2: Izskatās ka vaina bija tur, ka nebiju norādījis ja skaitlis ir 10 :)))). 10/10 punkti, un kods - http://paste.php.lv/250e31d82ad11a18c0240dcebcabad66?lang=cpp

Edited by laucinieks
Link to comment
Share on other sites

1)Aprēķinot ciparu summu, tu vari while ciklā iet tik ilgi kamēr skaitlis>0, nevis kamēr skaitlis>10, vienkārši pēdējā iterācija izdarīs to, ko tu papildus dari aiz cikla.

 

2)Man šķiet, ka šie mainīgo nosaukumi ir pārspīlēti. jebkurš int mainīgais ir skaitlis, tāpēc nav jēga to saukt par skaitli. aprēķināmos rezultātus var saukt par r vai rez, ja tā ir summa, tad par sum. Funkcijā, kurā ir 2 mainīgie, nav nepieciešams tos tik gari saukt, tas, manuprāt, padara kodu nelasāmāku.

Tāpat arī normāli skaitās ievaddatu mainīgos saukt tā, kā tas ir uzdevumā, piemēram n arī programmā saukt par n.

Link to comment
Share on other sites

Vēlviena lieta, kad esi dabūjis maksimālo punktu skaitu, pamēģini kodu sakārtot:

Pamēģini izņemt liekās lietas, saīsināt, padarīt vienkāršaku.

Koda vietās, kur tu atkārtojies, mēģini neatkārtoties.

Padomā, vai kādas vietas nevar uzrakstīt skaistāk un pareizāk, vari pat pamklēt internetā, kā citi raksta līdzīga lietas, bet domā līdzi, ne vienmēr tas, ko atrodi internetā ir labākais.

Respektīvi, doma ir tāda, ka ir svarīgi izstrādāt ātru kodēšanas tehniku - iemācīties rakstīt īsu, skaistu un pareizu kodu un pats galvenais apgūt dažādu nianšu optimālos paternus. Respektīvi, atstrādāt tieši nianses (kā efektīvāk iterēt stringu, kā sadalīt skaitli ciparos, kad izmantot string, kad char masīvu, kā noteikt dalāmību, utt.), lai sacensībās varētu pēc iespējas ātrāk rakstīt gatavas programmas.

Tenējoties ir jēga mēģinās katru uzdevumu izpildīt dažādos veidos, lai pats praksē redzētu, kuras metodes ātrāk uzrakstīt, saprast, mazāk kļūdu pielaiž rakstot.

Līmenim kāpjot, protams, vajag atstrādāt datu struktūras, kuras piedāvā STL, tas ir set, vector, list, map, u.c. Atstrādāt STL gatavo algoritmu izmantošanu kā sort un *_heap, u.c.

Edited by codez
Link to comment
Share on other sites

ok, vai ir kāda iespēja man noteikt cik ātri fails izpildas?

L.

 

+ Codez via ir kaut kāda string funkcija, ar kuru vislabāk kārtot/sadalīt/labot/meklēt stringā u.t.t.? Ja ir, iemet lūdzu link uz tutorial, gribu pārskriet pāri, lai zinu ;).

Edited by laucinieks
Link to comment
Share on other sites

Tiku līdz uzdevumam burti, kur dabūju 6/10 punktiem. Tātad kods -

http://paste.php.lv/...633f7c?lang=cpp

un uzdevums -

http://www.lio.lv/ol...umi.php?show=25

Pats mēģinu saprast, kas pietrūkst uzdevumā, bet pašlaik nesanāk vēl, ja ieraugāt, variet padot paslēptus hintus, ja neatradīšu paskatīšos ;)!

L.

 

EDIT: kodu palaboju uz - http://paste.php.lv/...de5dbf?lang=cpp , bet tāpat 6/10.

 

EDIT2: Iespējams jau zinu dēļ kā tas ir tikai, tagad jāizdomā kā to novērst. Tātad, iespējams, ka tas ir dēļ tā, ka viņš nevis meklē noteikti skaitu burtus, bet piem. ir vārdi

SALA

AL

un viņš šajā gadījumā ar find atradīs vienu L un divus A, bet vajadzētu, tikai lai viņš atrod no katra burta pa vienam burtam. Iespējams arī kļūdos par šo.

Edited by laucinieks
Link to comment
Share on other sites

Tā funkcija, jau tikai atrod vai viens no burtiem ir.

Tev vajag pārbaudīt vai no burtiem var salikt, kas nozīmē, ka sākumā jāsaskaita cik katra burta veids ir vārdā, bet pēc tam ejot cauri otram vārdam, jāskaita burti nost līdz tie nepietiek, vai arī vārds beidzas.

Link to comment
Share on other sites

Teiksim, tu vari vārdu glabāt, kā null terminated string:

 

char s[251];

 

šijā gadījumā tev s[0], būt vārda pirmais burts. Katram burtam ir kods, kurš principā ir tā burta vērtība un viņu var iegūt pārvēršot char par int.

 

cout << (int)s[0];

 

jā s[0] būs 'A', tad izvadīs 65. visu burtu kodi ir latīņu alfabētā pēc kārtas, attiecīgi 'B' ir 66, utt. Tas nozīmē, ka, ja no koda atņemsi 65, tad A-Z iegūsi 0-25.

Tālāk jau izveido int masīvu 0-25 elementiem, kuros glabāsies visu burtu skaits:

 

int skaits[26];

 

un ej cauri burtiem un skaiti:

for(int i=0;s[i];i++){
 skaits[s[i]-65]++;
}

 

Otreiz ej cauri otram vārdam un skaitot pārbaudi vai burti pietiek.

 

 

Otrs veids ir glabāt skaitu map datu struktūrā, bet šijā gadījumā tas būtu lieka sarežģīšana, taču mācību nolūkos būtu labi izveidot šī uzdevuma atrsinājumu ar map arī.

 

attiecīgā ciklā ejot cauri vārdam:

map<char,int> skaits;
char s[251];

//...
for(int i=0;s[i];i++){
 skaits[s[i]]++;
}

 

 

EDIT:

attiecīgie risinājumi:

1. variants: http://paste.php.lv/...1a2606?lang=cpp

2. variants: http://paste.php.lv/62ccacc7b7b5b3a1685f1b6f4028c777?lang=cpp

Edited by codez
Link to comment
Share on other sites

Hmm, skaidrs, pameklēšu vēl ar šiem uzdevumus, lai patrenētos :).

L.

 

EDIT: Tikko izrēķināju "Dienu". Codez varbūt vari paskatīties un palabot, ja es kaut ko "neefektīvi" esmu izdarījis?

Kods - http://paste.php.lv/...2f4821?lang=cpp

UZD - http://www.lio.lv/ol...umi.php?show=29

 

EDIT 2: Un ja vari arī paskaties par naudām, vai nebija iespēja kaut ko labāk/sīkāk uzrakstīt -

UZD : http://www.lio.lv/olimps/uzdevumi.php?show=32

Kods : http://paste.php.lv/4e68e83ab1bc3f9fc73c3376932bc67e?lang=cpp

Edited by laucinieks
Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

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

Loading...

×
×
  • Create New...