Jsou zobrazeny jen nové odpovědi. Zobrazit všechny
Předmět Autor Datum
Ještě přidávám seznam řešení, kde jsou všechny proměnné nenulové : 474811*8=3798488 484811*8=387848…
hynajs 15.03.2011 10:55
hynajs
Tomuhle ale nerozumím.
Tomix 15.03.2011 18:51
Tomix
DOTAZY = první šesticiferné číslo - je tam 8x, takže *8 = PORADNA - 7 místné číslo
marekdrtic 15.03.2011 19:43
marekdrtic
:-) Ale tenhle výpis nesplňuje žádný podmínky. (skoro žádný) Dneska jim to funguje normálně tak dám…
Tomix 15.03.2011 20:12
Tomix
Vše jsem snad popsal v předešlých dvou příspěvcích. Nesplňuje podmínku, aby hodnoty proměnných byly…
hynajs 15.03.2011 20:20
hynajs
Proč tam není třeba 474812*8=3798496? Jsem nějaký namrzlý, ale proč tedy nevyhovuje tohle?
Zarniwúp 15.03.2011 20:30
Zarniwúp
Protože nalevo A=8 , napravo A=6 ( na konci).
hynajs 15.03.2011 20:40
hynajs
Vím, proč vyhovují ty dva jediné správné. Proč ten, co jsem postnul, nemůže být ve skupině "nenulový… nový
Zarniwúp 15.03.2011 20:44
Zarniwúp
Aha, v seznamu jsou výsledky, kdy je respektována neměnnost A. Jaký to má důvod? nový
Zarniwúp 15.03.2011 20:49
Zarniwúp
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()… nový
los 15.03.2011 21:59
los
Velmi pekne riesenie ;) Mna nenapadlo ze overit sa to da spocitanim pouzitych cifier, a ine sposoby… nový
MM.. 15.03.2011 22:42
MM..
Vyzkoušeno: SiV5DJv2 Hezký, akorát bych to potřeboval trochu okomentovat.(nebo ne, pohledám si to)… nový
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 :… nový
MM.. 15.03.2011 23:31
MM..
Děkuji. nový
Tomix 15.03.2011 23:36
Tomix
este preistotu ti dam priklad: ked chcem z cisla x=123456 napriklad 3.cifru zprava, tak vydelim (ope… nový
MM.. 15.03.2011 23:48
MM..
<< 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..
Spíš bych doplnil podmínku, že použité vazby číslic s písmeny ve slově DOTAZY se musí shodovat ve vý… nový
Stefran 15.03.2011 22:51
Stefran
Tady jsou další podobné... hadanky-algebrogram.html 11.htm nový
Tomix 20.03.2011 21:50
Tomix

Ještě přidávám seznam řešení, kde jsou všechny proměnné nenulové :

474811*8=3798488
484811*8=3878488
494811*8=3958488
499811*8=3998488
514821*8=4118568
519821*8=4158568
529821*8=4238568
539821*8=4318568
974871*8=7798968
984871*8=7878968
994871*8=7958968
999871*8=7998968
974622*8=7796976
984622*8=7876976
994622*8=7956976
999622*8=7996976
514816*8=4118528
519816*8=4158528
529816*8=4238528
539816*8=4318528
974866*8=7798928
984866*8=7878928
994866*8=7958928
999866*8=7998928
974617*8=7796936
984617*8=7876936
994617*8=7956936
999617*8=7996936

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

este preistotu ti dam priklad: ked chcem z cisla x=123456
napriklad 3.cifru zprava, tak vydelim (operator delenie /) cislom 100, ziskam 1234 (len cele cislo pretoze oba operatory boli typ int). Potom urobim modulo (zvysok po deleni, operator %) cislom 10, a ziskam cifru 4.
Takze napr. (i/1000)%10 je 4.cifra zprava z cisla v premennej i, alebo i%10 je posledna cifra premennej i, apod.
P.S. tieto operacie a aj bitove operacie su VELMI RYCHLE. Dnesne CPU ich vedia urobit niekolko (aj 2-4) naraz v jednom jadre (paralelizuje si to jadro samo) kazdy takt. takze kludne aj 4*3 miliardy takych operacii za sekundu, kazde jadro. Naproti tomu operacie so stringami apod. su dost neefektivne ptz alokuju a kopiruju pamat atd. kludne aj 10000x pomalsie hlavne vo Windows kde MS alokacia pamate trva celu vecnost :-)

<< 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