Jsou zobrazeny jen nové odpovědi. Zobrazit všechny
Předmět Autor Datum
do C prekladaca nech si to strci sam kto chce :) DOba vypoctu bude radovo desatiny sekundy. Doba pro…
MM.. 15.03.2011 20:18
MM..
Pekné riešenie. :-) Doplním podmienku, že cifry sa nemôžu opakovať: #include <stdio.h> int main()…
los 15.03.2011 21:59
los
Vyzkoušeno: SiV5DJv2 Hezký, akorát bych to potřeboval trochu okomentovat.(nebo ne, pohledám si to)…
Tomix 15.03.2011 23:24
Tomix
kompletny komentar k tomu programu je tu: http://en.wikipedia.org/wiki/Operators_in_C_and_C% 2B%2B :…
MM.. 15.03.2011 23:31
MM..
Děkuji.
Tomix 15.03.2011 23:36
Tomix
<< je bitovy posun dolava, 1<<0 je 1, 1<<1 je 10 binarne, takze 2. 1<<2 je 100 binarne, takze 4. Atd… nový
MM.. 15.03.2011 23:53
MM..
Dík za vyčerpávající výklad. Řešení jsem upravil pro příklad PSICI+PSICI+PSICI=HAFANI codepad.org -… nový
Tomix 20.03.2011 21:32
Tomix
Programovanie neni o pocitoch ani ocakavaniach ale o absolutne preciznych definiciach a priebehoch.… poslední
MM.. 20.03.2011 21:53
MM..
Tady jsou další podobné... hadanky-algebrogram.html 11.htm nový
Tomix 20.03.2011 21:50
Tomix

do C prekladaca nech si to strci sam kto chce :) DOba vypoctu bude radovo desatiny sekundy. Doba programovania par minut :)

for(int i=0;i<1000000;i++)
{
 int x=8*i;
 if((i/100)%10 == x%10 && (i/100)%10 == (x/1000)%10 && (i/100000)%10 == (x/100)%10 && (i/10000)%10 == (x/100000)%10)
  printf("DOTAZY=%06d, PORADNA=%07d\n", i, x);
}

Pekné riešenie. :-)

Doplním podmienku, že cifry sa nemôžu opakovať:

#include <stdio.h>

int main() {
  for (int i = 100000; i < 1000000; ++i) {
    int x = 8 * i;
    if (i/100%10 == x%10 && i/100%10 == x/1000%10 && i/100000%10 == x/100%10 && i/10000%10 == x/100000%10) {
      int bitmask = 1<<i/100000%10|1<<i/10000%10|1<<i/1000%10|1<<i/100%10|1<<i/10%10|1<<i/1%10|1<<x/1000000%10|1<<x/10000%10|1<<x/10%10;
      int missing = 0;
      for (int j = 0; j < 10; ++j)
        if ((bitmask&(1<<j)) == 0 && ++missing > 1)
            break;
      if (missing == 1)
        printf("DOTAZY=%06d, PORADNA=%07d\n", i, x);
    }
  }
  return 0;
}

Edit: Vypíše to:

DOTAZY=509816, PORADNA=4078528
DOTAZY=509821, PORADNA=4078568

<< je bitovy posun dolava, 1<<0 je 1, 1<<1 je 10 binarne, takze 2. 1<<2 je 100 binarne, takze 4. Atd.

| je operacia bitove OR, takze napr. 100binarne OR 1binarne je 101binarne.

& je operacia bitove AND, da sa pouzit aj na testovanie bitu. Napr. 101binarne AND 100binarne = 100binarne, je nenulove tak to znamena ze 3.bit zprava bol 1.
001binarne AND 100binarne = 0, to znamena ze 3.bit zorava bol 0.

Programovanie neni o pocitoch ani ocakavaniach ale o absolutne preciznych definiciach a priebehoch.

for(neco1;podmienka;neco2) Command;
je presne a precizne difinovane ako toto:

neco1 -> if podmienka -> Command -> neco2 -|
        ^----------------------------------|

Z toho obrazka vyplyva napr. aj to ze ak podmienka nevyhovuje hned na zaciatku tak sa nevykonna Command ani raz. A aj to ze je uplne jedno ci napises do neco2 ++ pred alebo po alebo ci tam das i+=1 mozes tam dat dokonca aj rotacie a aj viac veci naraz prekladacu je to uplne fuk on to proste vykona vsetko to co tam nacpes do neco2 v spravnom okamziku.

P.S> vpodstate
for(neco1;podmienka;neco2) Command;
je uplne stejne jak
for(neco1;podmienka;) { Command; neco2; }
aj to druhe je korektne a dovolene :)

P.S.2. rozdiel medzi i++ a ++i by tam bol len vtedy ak by si chcel menit v tom "neco2" viac veci (menit zaroven i a aj nejake ine z), napr. by si tam napisal z = ++i tak by to znamenalo i+=1; z=i. Ak by si napisal z=i++ tak by to znamenalo z=i; i+=1, a to je rozdiel.

Zpět do poradny Odpovědět na původní otázku Nahoru