{"id":1974,"date":"2011-07-21T22:21:00","date_gmt":"2011-07-21T22:21:00","guid":{"rendered":"https:\/\/zrstest.zrs.hr\/index.php\/2011\/07\/21\/programerski-osvrt-na-prvo-kolo-ljetne-lige-c-2011-za-kadete\/"},"modified":"2011-07-21T22:21:00","modified_gmt":"2011-07-21T22:21:00","slug":"programerski-osvrt-na-prvo-kolo-ljetne-lige-c-2011-za-kadete","status":"publish","type":"post","link":"https:\/\/zrs.hr\/index.php\/2011\/07\/21\/programerski-osvrt-na-prvo-kolo-ljetne-lige-c-2011-za-kadete\/","title":{"rendered":"Programerski osvrt na prvo kolo Ljetne lige C++ 2011 za kadete"},"content":{"rendered":"<p>\n\tIza nas je prvo kolo Ljetne lige C++,&nbsp;<\/p>\n<p>\n\tNakon evaluacije, uslijedila je &quot;neslu\u017ebena&quot; analiza programskih rje&scaron;enja, a primje\u0107eni su dosta zanimljivi pristupi.<br \/>\n\tPosebno nam se dopao sljede\u0107i programski isje\u010dak (zadatak VEESAH):<\/p>\n<pre>\nk=(zb1+zb2)%10;\n if (k==1) cout&lt;&lt;&quot;9&quot;;\n if (k==2) cout&lt;&lt;&quot;8&quot;;\n if (k==3) cout&lt;&lt;&quot;7&quot;;\n if (k==4) cout&lt;&lt;&quot;6&quot;;\n if (k==5) cout&lt;&lt;&quot;5&quot;;\n if (k==6) cout&lt;&lt;&quot;4&quot;;\n if (k==7) cout&lt;&lt;&quot;3&quot;;\n if (k==8) cout&lt;&lt;&quot;2&quot;;\n if (k==9) cout&lt;&lt;&quot;1&quot;;\n<\/pre>\n<p>\n\tKoji bi algoritamski preveli kao:<\/p>\n<pre>\nako je ostatak 1, ispi&scaron;i 9\nako je ostatak 2, ispi&scaron;i 8\nako je ostatak 3, ispi&scaron;i 7\nako je ostatak 4, ispi&scaron;i 6\nako je ostatak 5, ispi&scaron;i 5\nako je ostatak 6, ispi&scaron;i 4\nako je ostatak 7, ispi&scaron;i 3\nako je ostatak 8, ispi&scaron;i 2\nako je ostatak 9, ispi&scaron;i 1<\/pre>\n<p>\n\tili skra\u0107eno:<\/p>\n<pre>\n1 -&gt; 9\n2 -&gt; 8\n3 -&gt; 7\n4 -&gt; 6\n5 -&gt; 5\n6 -&gt; 4\n7 -&gt; 3\n8 -&gt; 2\n9 -&gt; 1<\/pre>\n<p>\n\tOvaj dio sada postaje zanimljiv, kada zamijenimo <strong>-&gt;<\/strong> sa <strong>+<\/strong> i zapi&scaron;emo rezultate:<\/p>\n<pre>\n1 + 9 = 10\n2 + 8 = 10\n3 + 7 = 10\n4 + 6 = 10\n5 + 5 = 10\n6 + 4 = 10\n7 + 3 = 10\n8 + 2 = 10\n9 + 1 = 10<\/pre>\n<p>\n\tIz prilo\u017eenog vidimo da su broj u uvjetu te broj koji se ispisuje me\u0111usobno inverzni &quot;po 10&quot;, drugim rije\u010dima ovih 10 provjera se mo\u017ee napisati kao:<\/p>\n<pre>\nk=(zb1+zb2)%10;\ncout &lt;&lt; 10 - k;\n<\/pre>\n<p>\n\tMe\u0111utim u samom zadatku, tra\u017eena znamenka X mo\u017ee biti i nula! &Scaron;to u ovom isje\u010dku nije predvi\u0111eno i tu su na\u017ealost izgubljeni bodovi, dakle nadopuna u stilu tog isje\u010dka bi izgledala ovako:<\/p>\n<pre>\nk=(zb1+zb2)%10;\n<strong> if (k==0) cout&lt;&lt;&quot;0&quot;;\n<\/strong> if (k==1) cout&lt;&lt;&quot;9&quot;;\n if (k==2) cout&lt;&lt;&quot;8&quot;;\n if (k==3) cout&lt;&lt;&quot;7&quot;;\n if (k==4) cout&lt;&lt;&quot;6&quot;;\n if (k==5) cout&lt;&lt;&quot;5&quot;;\n if (k==6) cout&lt;&lt;&quot;4&quot;;\n if (k==7) cout&lt;&lt;&quot;3&quot;;\n if (k==8) cout&lt;&lt;&quot;2&quot;;\n if (k==9) cout&lt;&lt;&quot;1&quot;;<\/pre>\n<p>\n\t&nbsp;a kra\u0107a verzija bi shodno tome izgledala ovako:<\/p>\n<pre>\n<strong> if (k==0) \n     cout &lt;&lt; &quot;0&quot;; \n<\/strong>  else \n    cout &lt;&lt; 10 - k;<\/pre>\n<p>\n\tMe\u0111utim \u010dak ni ta provjera nije potrebna!&nbsp;Zato &scaron;to vrijedi da je 10%10 == 0, a D%10 == D (gdje je D jedna znamenka).&nbsp;<\/p>\n<p>\n\tStoga je kra\u0107e rje&scaron;enje:<\/p>\n<pre>\nk=(zb1+zb2)%10;\ncout &lt;&lt; (10 - k)%10;<\/pre>\n<p>\n\tA mo\u017ee i jednolinijsko (bez nepotrebnih uvo\u0111enja novih varijabli):<\/p>\n<pre>\ncout &lt;&lt; (10 - ( (zb1+zb2) % 10 ) ) % 10;<\/pre>\n<p>\n\tVoila! Eto i formule za izra\u010dun znamenke X ! To isto bi algoritamski preveli kao:<\/p>\n<pre>\nIspi&scaron;i zadnju znamenku 10-inverza \nod zadnje znamenke sume zb1+zb2. \n\n<\/pre>\n<p>\n\t&#8212;<\/p>\n<p>\n\t<strong>Od ostalih &quot;gluparijica&quot;, primje\u0107ene su sljede\u0107e, koje su izgleda neizbje\u017ene, ali i pomalo simpati\u010dne \ud83d\ude42<\/strong><\/p>\n<p>\n\t1) Odre\u0111eni natjecatelji jednostavno ne \u017eele zavr&scaron;iti ispis u novom retku&#8230; Nekako im uvijek smeta taj <strong>cout &lt;&lt; endl;<\/strong> na kraju&nbsp;<\/p>\n<p>\t2) Famozni&nbsp;<strong>system(&quot;pause&quot;);<\/strong> kod pojedinaca nikako ne dopu&scaron;ta da se ispred njega na\u0111u dva slasha (\/\/) &#8230;&nbsp;<\/p>\n<p>\n\t<br \/>\n\t3) Zanimljivo je da u tre\u0107em zadatku postoji ishod u kojem se ispisuje konstanta &quot;<strong>Broj kartice je ispravan.<\/strong>&quot;, dodu&scaron;e u veoma rijetkom slu\u010daju (1\/10 test primjera), ali samo se mali broj natjecatelja (<em>koji nisu pristupili stvarnom rje&scaron;avanju<\/em>) dosjetio to ispisati i pokupiti besplatnih 10 bodova! \ud83d\ude42 Dakle ipak se isplati barem pogledati test primjere, iako se zadatak \u010dini te&scaron;kim&#8230;&nbsp;<\/p>\n<p>\t4) I dalje se susre\u0107emo sa slu\u010dajevima pogre&scaron;no formatiranih ispisa, (npr. umjesto razmaka se ispisuje novi redak ) &scaron;to mo\u017ee znatno usporiti evaluaciju (<em>da ne ka\u017eemo da automatska evaluacija vjerojatno ne bi ni pro&scaron;la<\/em> )<\/p>\n<p>\n\t5) Na\u017ealost C++ jo&scaron; uvijek ne podr\u017eava 16-znamenkaste integere, pa bi provjera tipa (x == 1234567890123456) rezultirala sa compile error, &scaron;to se na\u017ealost i dogodilo u jednom slu\u010daju&#8230; Bilo bi korisno se podsjetiti koji je raspon integera od 4B ili doublea od 8B ?<\/p>\n<p>\n\t<strong>Sve u svemu, iza nas je jedno uspje&scaron;no kolo i puno sre\u0107e u nadolaze\u0107im<\/strong>!<\/p>\n<p>\n\t<em>Autor zadataka C++ kadeti.<\/em><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Iza nas je prvo kolo Ljetne lige C++,&nbsp; Nakon evaluacije, uslijedila je &quot;neslu\u017ebena&quot; analiza programskih rje&scaron;enja, a primje\u0107eni su dosta zanimljivi pristupi. Posebno nam se dopao sljede\u0107i programski isje\u010dak (zadatak VEESAH): k=(zb1+zb2)%10; if (k==1) cout&lt;&lt;&quot;9&quot;; if (k==2) cout&lt;&lt;&quot;8&quot;; if (k==3) cout&lt;&lt;&quot;7&quot;; if (k==4) cout&lt;&lt;&quot;6&quot;; if (k==5) cout&lt;&lt;&quot;5&quot;; if (k==6) cout&lt;&lt;&quot;4&quot;; if (k==7) cout&lt;&lt;&quot;3&quot;; if (k==8) [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":1975,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[14,23],"tags":[],"class_list":["post-1974","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-obavijesti","category-ljeto-u-zagrebu"],"_links":{"self":[{"href":"https:\/\/zrs.hr\/index.php\/wp-json\/wp\/v2\/posts\/1974","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/zrs.hr\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/zrs.hr\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/zrs.hr\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/zrs.hr\/index.php\/wp-json\/wp\/v2\/comments?post=1974"}],"version-history":[{"count":0,"href":"https:\/\/zrs.hr\/index.php\/wp-json\/wp\/v2\/posts\/1974\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/zrs.hr\/index.php\/wp-json\/wp\/v2\/media\/1975"}],"wp:attachment":[{"href":"https:\/\/zrs.hr\/index.php\/wp-json\/wp\/v2\/media?parent=1974"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/zrs.hr\/index.php\/wp-json\/wp\/v2\/categories?post=1974"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/zrs.hr\/index.php\/wp-json\/wp\/v2\/tags?post=1974"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}