Hirdetés

Keresés

Új hozzászólás Aktív témák

  • cattus

    addikt

    válasz kkdesign #8751 üzenetére

    Felteszem mostanában kezdtél programozni, így én nem igazán ajánlanék még Linq-s megoldást, az egy ilyen bonyolultságú feladatra ágyúval verébre kategória.

    Gondold végig, mi a probléma és hogyan lehetne megoldani. Leírom az én gondolatmenetemen (kódot szándékosan nem, jobb, ha azt magad vezeted le):

    Hozz létre egy változót, amiben tárolod az eddigi leghosszabb sorozat hosszát (kezdetben 0, legyen a neve mondjuk max_lenght). Végig kell iterálni a tömbön. Minden számra meg kell nézni, hogy 0-e, vagy nem. Ha nem nulla, akkor ugye ahogy te is gondoltad, növelsz egy számlálót (legyen a neve mondjuk current_lenght, kezdetben 0 ez is). Ha nullát találsz, akkor megnézed, hogy a most talált sorozatod hosszabb-e, mint az eddigi. Ha igen, akkor felülírod a max_lenght-et, és nullázod a current_lenght-et.

  • moseras

    tag

    válasz kkdesign #8751 üzenetére

    Hello,

    Nem teljesen tiszta, hogy mit is akarsz pontosan, valami ilyenre gondoltál ?

    static int convert(List<int> l1)
    {
    int ret = 0;
    foreach (var e in l1)
    {
    ret *= 10;
    ret += e;
    }
    return ret;
    }

    static void Main(string[] args)
    {
    var szamok = new List<int>() { 0,0,1,5,7,3,0,0,1,2,3,0,0,5,8,7,4,5,0,1,2,5,8,9 };

    // Az eredeti számsorozat
    Console.WriteLine($"Az eredeti számsorozat: { string.Join("", szamok) }");

    // A nem 0 értékű számjegyek száma
    var c1 = szamok.Count(x => x != 0);
    Console.WriteLine($"A nem 0 értékű számjegyek száma: { c1 }");

    var temp = new List<int>();
    var leghosszabb_szamok = new List<int>();
    int maxx = 0;

    foreach (var item in szamok)
    {
    if (item != 0)
    {
    temp.Add(item);
    }
    else
    {
    if (temp.Count > 0 && temp.Count >= maxx)
    {
    leghosszabb_szamok = leghosszabb_szamok.Where(n => Math.Floor(Math.Log10(n) + 1) >= maxx).ToList();
    leghosszabb_szamok.Add(convert(temp));
    maxx = temp.Count();
    }
    temp.Clear();
    }
    }

    if (temp.Count > 0 && temp.Count >= maxx)
    {
    leghosszabb_szamok = leghosszabb_szamok.Where(n => Math.Floor(Math.Log10(n) + 1) >= maxx).ToList();
    leghosszabb_szamok.Add(convert(temp));
    }

    // A leghosszabb számjegyű szám(ok)
    Console.WriteLine($"A leghosszabb számjegyű szám(ok): { string.Join(", ", leghosszabb_szamok) }");

    // A leghosszabb számjegyű szám(ok) jegyeinek száma
    Console.WriteLine($"A leghosszabb számjegyű szám(ok) jegyeinek száma: { maxx }");
    }

    Eredmény:

    Az eredeti számsorozat: 001573001230058745012589
    A nem 0 értékű számjegyek száma: 17
    A leghosszabb számjegyű szám(ok): 58745, 12589
    A leghosszabb számjegyű szám(ok) jegyeinek száma: 5

    Ha jól értem, akkor neked kellene

    - az eredeti sorozat nem 0 elemeinek száma
    - a leghosszab jegyű szám(ok) külön listába gyűjtve
    - a leghosszab jegyű szám(ok) jegyeinek száma

    Imi.

  • lord.lakli

    őstag

    válasz kkdesign #8751 üzenetére

    Használj List<byte>-et adattárolásra és Linq-et az összeszámolásra.

Új hozzászólás Aktív témák