Մեջբերում MSGM-ի խոսքերից Նայել գրառումը
Զանգվածի մեծությունը փաստորեն տվյալ տարվա դրությամբ երբևիցե ապրած կենդանիների քանակն ա, չէ? Բայց մի քանի 100 տարուց ապրող կենդանիների քանակը էնքան մեծ ա դառնում, որ 64 բիտանոց long long-ն էլ չի հերիքում քանակը պահելու համար: Այսինքն ուղղակի սիմուլյացիա ես անում ու պատասխանը շատ հեշտ ստացվում ա, բայց մի քիչ մեծ թվերի համար համ շատ երկար ա աշխատում, համ էլ էդքան հիշողություն չի գտնվի բոլորի տարիքները հիշելու համար:

Հա, ճիշտ ես հասկանում` գրածս ծրագրում n-ը (k զանգվածի տարրերի քանակը) երբևէ ապրած կենդանիների քանակն է:
Որպես օպտիմիզացիա կարելի է ընդամենը ամեն տարի 0-ական տարրերը զանգվածից հեռացնել` կմնան մենակ չսատկած կենդանիները:
Կարելի է երկրորդ զանգվածը պահել` ոչ սեռահասուն կենդանիների համար:
Եղբայր էդ ինչ թիվա, որ 64 բիտանոց long-ը չի հերիքի? 2-ի 63 Աստիճանից մեծ` 8x10246? էսի քո ասած 1012-ից հաստատ մեծ թիվ ա
Մեջբերում MSGM-ի խոսքերից Նայել գրառումը
Իմ վերջին լուծումը (կոդով), օրինակ, հիշողություն շատ քիչ ա օգտագործում ու օգտագործումն էլ N-ից կախված չի, բայց համեմատաբար դանդաղ ա աշխատում (N=1,000,000,000-ի համար մոտ 450 վրկ.): Իսկ էս ամենավերջին նկարագրածս լուծումը 0.5 վրկ.-ի մեջ կտեղավորվի նույնիսկ N=10^12-ի դեպքում:
Ի դեպ, էդ ցուցիչի հետ սխալ ես աշխատում: Ցուցիչը հայտարարելուց, իրա արժեքը ինչ-որ անկապ թիվ ա (հիշողության մեջ անկապ տեղ ա ցույց տալիս), հաշվի առնելով էլ, որ զանգվածի երկարությունը ուզում ես դինամիկ փոխել, լավ կլինի std::vector-ից օգտվես.
vector<int> vi;
vi.push_back(a);

Dictionary-ն էլ C++ ում std::map-ն ա`
map<string, int> m;
m["tandz"] = 121;
m["khndzor"] = 367;
cout << m["tandz"] + m["khndzor"] << endl;
Ցուցիչի հետ հեչ էլ սխալ չեմ աշխատում` դասական աշխատելու ձևն է: Ինչ կապ ունի, թե ինչ թիվա? փոփոխական է, կարևորը որ հետո արժեք տաս: Մի քանի գրառում առաջ Դեյտելի գրքից նույնիսկ մեջբերում եմ արել դրա հետ կապված
Հեչ իմաստ չեմ տեսնում vector օբյեկտից օգտվելու մեջ` ցուցիչը լիովին բավարար է:
Dictionary-ն էլ հեչ էլ map-ը չի:
Dictionary-ն Microsoft Scripting Runtime գրադարանի օբյեկտ է` որ լեզուն հնարավորութուն ունի այդ գրադարանին դիմելու` կարող ես հայտարարել:
Կառուցվածքն էլ հետևյալն է.
D (key, value) ու value-ն կարող են լինել ցանկացած տիպի, նույնիսկ այլ օբյեկտ:
Չեմ կարծում, որ մատրիցաների բազմապատկումը մեծ թվերի պարագայում կարող է այդքան արագ լինել` 900 անգամ:
Ամեն դեպքում քո առաջարկած տարբերակը շատ հետաքրքիր ու ուսանելի տարբերակ է:
Ի դեպ 100 տարում կենդանիների քանակը ստացվում է 1703208 հատ` կենդանի, չսատկած: Ու հաշվում ա 73 վայրկյանում:
Էս էլ կոդը` VBA-ի համար, կարող ես Excel-ի կամ Word-ի մեջ աշխատացնել: Ընդ որում սա Dictionary-ով տարբերակը չի
Կոդ:
Sub Test1()

    Dim tari, qanak, n, i, j As Long
    Dim k() As Variant
    Dim StartTime As Date
    Dim EndTime As Date
    Dim delta As Date
    Dim s As String
    
    tari = 100
    ReDim k(1) As Variant
    k(0) = 15
    qanak = 1
    n = 1
    StartTime = Now
    For i = 1 To tari
        For j = 0 To n - 1
            If k(j) > 0 Then
                If (k(j) >= 15 And k(j) <= 35) Then
                    n = n + 1
                    ReDim Preserve k(n) As Variant
                    k(n - 1) = 1
                    qanak = qanak + 1
                ElseIf k(j) = 35 Then
                    k(j) = 0
                    qanak = qanak - 1
                End If
                k(j) = k(j) + 1
            End If
        Next j
    Next i
    EndTime = Now
    delta = EndTime - StartTime
    s = CStr(Hour(delta) * 3600 + Minute(delta) * 60 + Second(delta))
    MsgBox (CStr(qanak) & " kendani <->" & s & " seconds")

End Sub