Vydělávej až 160.000 Kč měsíčně! Akreditované rekvalifikační kurzy s garancí práce od 0 Kč. Více informací.
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.
Avatar
Michael
Člen
Avatar
Michael:22.4.2019 19:12

Čtyři sousední číslice v čísle s 1000 ciframi, které mají největší součin, jsou tyto: 9 × 9 × 8 × 9 = 5832. (Zvýrazněno)

1398024787037­910369017901433749013239­7194930172019
8698352031277­450632623957831801698480­1869478851843
7586156078911­294949545950173795833195­2853208805511
0254069874715­852386305071569329096329­5227443043557
8669664895044­524452316173185640309871­1121722383113
5222989342338­030813533627661428280644­4486645238749
2035890729629­049156044077239071381051­5859307960866
8017242712188­399879790879227492190169­9720888093776
7572733300105­336788122023542180975125­4540594752243
6258490771167­055601360483958644670632­4415722155397
4369781797784­617406495514929086256932­1978468622482
3397224137565­705605749026140797296865­2414535100474
4216637048440­31"9989"0008895243450658­541227588666881
2642717147992­444292823086346567481391­9123162824586
0786645835912­456652947654568284891288­3142607690042
1421902267105­562632111110937054421750­6941658960408
1719840385096­245544436298123098787992­7244284909188
7458015616609­791913387549920052406368­9912560717606
3588611646710­940507754100225698315520­0055935729725
2163626956188­267042825248360082325753­0420752963450

V uvedeném 1000 ciferním čísle nalezněte třináct sousedních číslic, které mají největší součin.

Jaká je hodnota takového součinu?

Zkusil jsem: Vím že potřebuju vstup od uživatele převest na string kde následně daný string projíždím po 13 číslicích a porovnávám mezi ostatními výsledky s největším možným součinem. Ale nevím jak to naprogramovat má někdo nápad.

Chci docílit: Je to poprvé co se tu ptám a nevím přesně jak interakce mezi komunitou porbíhá a tak jsem to chtěl zkusit protože opravdu nevím jak to napsat.

Editováno 22.4.2019 19:14
 
Odpovědět
22.4.2019 19:12
Avatar
Michael
Člen
Avatar
Michael:22.4.2019 19:35
:-)
 
Nahoru Odpovědět
22.4.2019 19:35
Avatar
DarkCoder
Člen
Avatar
Odpovídá na Michael
DarkCoder:22.4.2019 20:46

Posloupnost číslic si načti do 1000 prvkového pole celých cisel. V rozsahu indexu 0 až 998 (1000-13+1) prováděj součin číslic a porovnávej výsledek s největší hodnotou a v případě že bude větší, aktualizuj. Prvotní hodnota je inicializována součinem prvních 13 číslic. Můžeš využít toho že je-li alespoň jedno ze 13 čísel nulové, bude součin 0 a můžeš tak přeskočit na index následující za poslední nulou.

Nahoru Odpovědět
22.4.2019 20:46
"I ta nejlepší poučka postrádá na významu, není-li patřičně předána." - DarkCoder
Avatar
Odpovídá na Michael
Tomáš Novotný:22.4.2019 21:18

Tak třeba... každou '0' bych použil jako splitter a rozdělil string na menší části. Důvodem je zda vůbec existuje 13 po sobě jdoucích nenulových číslic... pokud ne, výsledek maximálního součinu bude 0. Pokud ano, bude potřeba projít alespoň z příkladového stringu o hodně méně možností.

Jiný přístup s podobnou myšlenkou, vzít prvních 13 číslic a zjistit zda v nich není 0, pokud ano posunout se na pozici nuly + 1 a vzít znovu 13 číslic. Pokud výběr neobsahuje 0, spočítá se součin a posune se o jednu číslici.

výsledek:
celkový počet číslic: 1000
substringů bez 0 délky >= 13: 24
substringů bez 0 délky 13: 219
maximum na pozici: 197
číslice: 5578669664895
součin: 23514624000

Nahoru Odpovědět
22.4.2019 21:18
∞ ... the exact amount of possibilities how to deal with the situation ... so by calm, your solution is one of many
Avatar
STP
Člen
Avatar
STP:24.4.2019 10:20

Výsledek by měl být 2091059712.

private void Pocitej()
    {
        List<int> vysledekList = new List<int>();
        int pocetPoSobeJdoucichCisel = 13;
        string s = @"1398024787037910369017901433749013239719493017201986983520312774506326239578318016984801869478851843758615607891129494954595017379583319528532088055110254069874715852386305071569329096329522744304355786696648950445244523161731856403098711121722383113522298934233803081353362766142828064444866452387492035890729629049156044077239071381051585930796086680172427121883998797908792274921901699720888093776757273330010533678812202354218097512545405947522436258490771167055601360483958644670632441572215539743697817977846174064955149290862569321978468622482339722413756570560574902614079729686524145351004744216637048440319989000889524345065854122758866688126427171479924442928230863465674813919123162824586078664583591245665294765456828489128831426076900421421902267105562632111110937054421750694165896040817198403850962455444362981230987879927244284909188745801561660979191338754992005240636899125607176063588611646710940507754100225698315520005593572972521636269561882670428252483600823257530420752963450";

        for (int i = 0; i < s.Length; i++)
        {
            int c = int.Parse(s[i].ToString());
            int soucin = 1;
            for (int x = 0; x < pocetPoSobeJdoucichCisel; x++)
            {

                if ((i + x) < s.Length)
                {
                    int cSum = int.Parse(s[i + x].ToString());
                    soucin = soucin * cSum;
                }
            }
            vysledekList.Add(soucin);
        }
        int vysledekje = vysledekList.Max();
    }
Nahoru Odpovědět
24.4.2019 10:20
Když umřít, tak online!!!
Avatar
Odpovídá na STP
Michal Štěpánek:25.4.2019 7:10

Myslím, že bylo to zadání na nalezení 13ti sousedních číslic s největším součinem a ne na výsledek toho největšího součinu...

Nahoru Odpovědět
25.4.2019 7:10
Nikdy neříkej nahlas, že to nejde. Vždycky se totiž najde blbec, který to neví a udělá to...
Avatar
STP
Člen
Avatar
Odpovídá na Michal Štěpánek
STP:26.4.2019 8:45

Michael se ptá:

V uvedeném 1000 ciferním čísle nalezněte třináct sousedních číslic, které mají největší součin.

Jaká je hodnota takového součinu?

Nahoru Odpovědět
26.4.2019 8:45
Když umřít, tak online!!!
Avatar
Odpovídá na STP
Tomáš Novotný:26.4.2019 10:07

Přijde mi, že ti to někde ořízl 32-bit int a zahrnul ti jen součiny menší než 2,147,483,647.
Tvůj string je:
pozice: 503
číslice: 9781797784617
součin: 2,091,059,712

Nahoru Odpovědět
26.4.2019 10:07
∞ ... the exact amount of possibilities how to deal with the situation ... so by calm, your solution is one of many
Avatar
STP
Člen
Avatar
Odpovídá na Tomáš Novotný
STP:26.4.2019 10:18

Je to tak... 23514624000

private void Pocitej()
        {
            List<long> vysledekList = new List<long>();
            int pocetPoSobeJdoucichCisel = 13;
            string s = @"1398024787037910369017901433749013239719493017201986983520312774506326239578318016984801869478851843758615607891129494954595017379583319528532088055110254069874715852386305071569329096329522744304355786696648950445244523161731856403098711121722383113522298934233803081353362766142828064444866452387492035890729629049156044077239071381051585930796086680172427121883998797908792274921901699720888093776757273330010533678812202354218097512545405947522436258490771167055601360483958644670632441572215539743697817977846174064955149290862569321978468622482339722413756570560574902614079729686524145351004744216637048440319989000889524345065854122758866688126427171479924442928230863465674813919123162824586078664583591245665294765456828489128831426076900421421902267105562632111110937054421750694165896040817198403850962455444362981230987879927244284909188745801561660979191338754992005240636899125607176063588611646710940507754100225698315520005593572972521636269561882670428252483600823257530420752963450";

            for (int i = 0; i < s.Length; i++)
            {

                long soucin = 1;
                for (int x = 0; x < pocetPoSobeJdoucichCisel; x++)
                {

                    if ((i + x) < s.Length)
                    {
                        long cSum = long.Parse(s[i + x].ToString());
                        soucin = soucin * cSum;
                    }
                }
                vysledekList.Add(soucin);
            }
            long vysledekje = vysledekList.Max();
        }
Nahoru Odpovědět
26.4.2019 10:18
Když umřít, tak online!!!
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 9 zpráv z 9.