Diskuze: Práce se stringem
V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.

Člen

Zobrazeno 9 zpráv z 9.
V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.
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.
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
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();
}
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...
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?
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
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();
}
Zobrazeno 9 zpráv z 9.