Zadatak može da se radi na mnogo načina. U nastavku je jedan način rešavanja 2. zadatka 

C++ rešenje

#include <iostream>
#include <string>
#include <vector>
#include <cmath>
#include <algorithm>

using namespace std;

//////////////////////////////////////////////////////////////
// Funkcija za proveru pravilnosti stringa
//////////////////////////////////////////////////////////////
bool IsValidString(string s)
{
    int freq[256] = {0};

    //////////////////////////////////////////////////////////////
    // Brojanje karaktera
    //////////////////////////////////////////////////////////////
    for (char c : s)
    {
        freq[(unsigned char)c]++;
    }

    vector<int> counts;

    //////////////////////////////////////////////////////////////
    // Formiranje liste učestalosti
    //////////////////////////////////////////////////////////////
    for (int i = 0; i < 256; i++)
    {
        if (freq[i] > 0)
        {
            counts.push_back(freq[i]);
        }
    }

    //////////////////////////////////////////////////////////////
    // Sortiranje učestalosti
    //////////////////////////////////////////////////////////////
    sort(counts.begin(), counts.end());

    //////////////////////////////////////////////////////////////
    // Ako su svi jednaki
    //////////////////////////////////////////////////////////////
    if (counts.front() == counts.back())
    {
        return true;
    }

    //////////////////////////////////////////////////////////////
    // Provera uklanjanja jednog karaktera
    //////////////////////////////////////////////////////////////
    if (counts.back() - counts.front() == 1 &&
        counts[counts.size() - 1] > counts[counts.size() - 2])
    {
        return true;
    }

    //////////////////////////////////////////////////////////////
    // Primer:
    // 1 2 2 2
    //////////////////////////////////////////////////////////////
    if (counts.front() == 1 &&
        counts[1] == counts.back())
    {
        return true;
    }

    return false;
}

int main()
{
    //////////////////////////////////////////////////////////////
    // Unos stringa
    //////////////////////////////////////////////////////////////
    string s1;

    cout << "Unesite string: ";

    getline(cin, s1);

    //////////////////////////////////////////////////////////////
    // 2.1 ASCII niz
    //////////////////////////////////////////////////////////////
    vector<string> brojeviNiz;

    for (int i = 0; i < s1.length(); i++)
    {
        //////////////////////////////////////////////////////////////
        // ASCII vrednost
        //////////////////////////////////////////////////////////////
        int ascii = (int)s1[i];

        //////////////////////////////////////////////////////////////
        // Pretvaranje u string
        //////////////////////////////////////////////////////////////
        string broj = to_string(ascii);

        //////////////////////////////////////////////////////////////
        // Dodavanje vodećih nula
        //////////////////////////////////////////////////////////////
        while (broj.length() < 3)
        {
            broj = "0" + broj;
        }

        brojeviNiz.push_back(broj);
    }

    cout << endl;
    cout << "********** 2.1 **********" << endl;

    //////////////////////////////////////////////////////////////
    // Obrada parnih indeksa
    //////////////////////////////////////////////////////////////
    for (int i = 0; i < brojeviNiz.size(); i += 2)
    {
        string broj = brojeviNiz[i];

        //////////////////////////////////////////////////////////////
        // Cifre
        //////////////////////////////////////////////////////////////
        int a = broj[0] - '0';
        int b = broj[1] - '0';
        int c = broj[2] - '0';

        //////////////////////////////////////////////////////////////
        // Aritmetička sredina
        //////////////////////////////////////////////////////////////
        int sredina = (int)ceil((a + b + c) / 3.0);

        //////////////////////////////////////////////////////////////
        // Formiranje novog stringa
        //////////////////////////////////////////////////////////////
        string novi =
            string(1, broj[0]) +
            to_string(sredina) +
            string(1, broj[1]) +
            to_string(sredina) +
            string(1, broj[2]);

        cout << novi << endl;
    }

    //////////////////////////////////////////////////////////////
    // 2.2 Provera pravilnosti
    //////////////////////////////////////////////////////////////
    cout << endl;
    cout << "********** 2.2 **********" << endl;

    if (IsValidString(s1))
    {
        cout << "String je pravilan." << endl;
    }
    else
    {
        cout << "String nije pravilan." << endl;
    }

    //////////////////////////////////////////////////////////////
    // 2.3 Formiranje gena
    //////////////////////////////////////////////////////////////
    string s2 = "";

    for (char c : s1)
    {
        c = toupper(c);

        if (c == 'A' || c == 'C' || c == 'T' || c == 'G')
        {
            s2 += c;
        }
    }

    cout << endl;
    cout << "********** 2.3 **********" << endl;

    cout << "s2 = " << s2 << endl;

    //////////////////////////////////////////////////////////////
    // 2.4 Stabilnost gena
    //////////////////////////////////////////////////////////////
    int A = 0;
    int C = 0;
    int G = 0;
    int T = 0;

    //////////////////////////////////////////////////////////////
    // Brojanje karaktera
    //////////////////////////////////////////////////////////////
    for (char c : s2)
    {
        switch (c)
        {
            case 'A':
                A++;
                break;

            case 'C':
                C++;
                break;

            case 'G':
                G++;
                break;

            case 'T':
                T++;
                break;
        }
    }

    cout << endl;
    cout << "********** 2.4 **********" << endl;

    cout << "A = " << A << endl;
    cout << "C = " << C << endl;
    cout << "G = " << G << endl;
    cout << "T = " << T << endl;

    bool stabilan = false;

    //////////////////////////////////////////////////////////////
    // Provera stabilnosti
    //////////////////////////////////////////////////////////////
    if (s2.length() % 4 == 0)
    {
        int n = s2.length() / 4;

        if (A == n &&
            C == n &&
            G == n &&
            T == n)
        {
            stabilan = true;
        }
    }

    if (stabilan)
    {
        cout << "Gen je stabilan." << endl;
    }
    else
    {
        cout << "Gen nije stabilan." << endl;
    }

    //////////////////////////////////////////////////////////////
    // 2.5 Najkraći podniz
    //////////////////////////////////////////////////////////////
    cout << endl;
    cout << "********** 2.5 **********" << endl;

    //////////////////////////////////////////////////////////////
    // Maksimalna učestalost
    //////////////////////////////////////////////////////////////
    int maksimum = max(max(A, C), max(G, T));

    string dodatak = "";

    //////////////////////////////////////////////////////////////
    // Dodavanje nedostajućih karaktera
    //////////////////////////////////////////////////////////////
    dodatak += string(maksimum - A, 'A');
    dodatak += string(maksimum - C, 'C');
    dodatak += string(maksimum - G, 'G');
    dodatak += string(maksimum - T, 'T');

    cout << "Najkraci podniz: " << dodatak << endl;

    return 0;
}

C# rešenje

using System;
using System.Collections.Generic;
using System.Linq;

class Program
{
    //////////////////////////////////////////////////////////////
    // Provera pravilnosti stringa
    //////////////////////////////////////////////////////////////
    static bool IsValidString(string s)
    {
        Dictionary<char, int> freq =
            new Dictionary<char, int>();

        //////////////////////////////////////////////////////////////
        // Brojanje karaktera
        //////////////////////////////////////////////////////////////
        foreach (char c in s)
        {
            if (!freq.ContainsKey(c))
            {
                freq[c] = 0;
            }

            freq[c]++;
        }

        List<int> counts =
            freq.Values.ToList();

        counts.Sort();

        //////////////////////////////////////////////////////////////
        // Svi jednaki
        //////////////////////////////////////////////////////////////
        if (counts.First() == counts.Last())
        {
            return true;
        }

        //////////////////////////////////////////////////////////////
        // Razlika 1
        //////////////////////////////////////////////////////////////
        if (counts.Last() - counts.First() == 1 &&
            counts[counts.Count - 1] >
            counts[counts.Count - 2])
        {
            return true;
        }

        //////////////////////////////////////////////////////////////
        // Primer:
        // 1 2 2 2
        //////////////////////////////////////////////////////////////
        if (counts.First() == 1 &&
            counts[1] == counts.Last())
        {
            return true;
        }

        return false;
    }

    static void Main()
    {
        //////////////////////////////////////////////////////////////
        // Unos stringa
        //////////////////////////////////////////////////////////////
        Console.Write("Unesite string: ");

        string s1 = Console.ReadLine();

        //////////////////////////////////////////////////////////////
        // 2.1 ASCII niz
        //////////////////////////////////////////////////////////////
        List<string> brojeviNiz =
            new List<string>();

        foreach (char c in s1)
        {
            //////////////////////////////////////////////////////////////
            // ASCII zapis
            //////////////////////////////////////////////////////////////
            string broj =
                ((int)c).ToString("D3");

            brojeviNiz.Add(broj);
        }

        Console.WriteLine();
        Console.WriteLine("********** 2.1 **********");

        //////////////////////////////////////////////////////////////
        // Obrada parnih indeksa
        //////////////////////////////////////////////////////////////
        for (int i = 0; i < brojeviNiz.Count; i += 2)
        {
            string broj = brojeviNiz[i];

            int a = broj[0] - '0';
            int b = broj[1] - '0';
            int c = broj[2] - '0';

            //////////////////////////////////////////////////////////////
            // Sredina
            //////////////////////////////////////////////////////////////
            int sr =
                (int)Math.Ceiling(
                    (a + b + c) / 3.0
                );

            //////////////////////////////////////////////////////////////
            // Novi string
            //////////////////////////////////////////////////////////////
            string novi =
                broj[0] +
                sr.ToString() +
                broj[1] +
                sr.ToString() +
                broj[2];

            Console.WriteLine(novi);
        }

        //////////////////////////////////////////////////////////////
        // 2.2
        //////////////////////////////////////////////////////////////
        Console.WriteLine();
        Console.WriteLine("********** 2.2 **********");

        if (IsValidString(s1))
        {
            Console.WriteLine(
                "String je pravilan."
            );
        }
        else
        {
            Console.WriteLine(
                "String nije pravilan."
            );
        }

        //////////////////////////////////////////////////////////////
        // 2.3 Formiranje gena
        //////////////////////////////////////////////////////////////
        string s2 = "";

        foreach (char c in s1)
        {
            char veliko =
                Char.ToUpper(c);

            if (veliko == 'A' ||
                veliko == 'C' ||
                veliko == 'G' ||
                veliko == 'T')
            {
                s2 += veliko;
            }
        }

        Console.WriteLine();
        Console.WriteLine("********** 2.3 **********");

        Console.WriteLine("s2 = " + s2);

        //////////////////////////////////////////////////////////////
        // 2.4 Stabilnost gena
        //////////////////////////////////////////////////////////////
        int A = 0;
        int C = 0;
        int G = 0;
        int T = 0;

        foreach (char c in s2)
        {
            switch (c)
            {
                case 'A':
                    A++;
                    break;

                case 'C':
                    C++;
                    break;

                case 'G':
                    G++;
                    break;

                case 'T':
                    T++;
                    break;
            }
        }

        Console.WriteLine();
        Console.WriteLine("********** 2.4 **********");

        Console.WriteLine("A = " + A);
        Console.WriteLine("C = " + C);
        Console.WriteLine("G = " + G);
        Console.WriteLine("T = " + T);

        bool stabilan = false;

        if (s2.Length % 4 == 0)
        {
            int n = s2.Length / 4;

            if (A == n &&
                C == n &&
                G == n &&
                T == n)
            {
                stabilan = true;
            }
        }

        if (stabilan)
        {
            Console.WriteLine(
                "Gen je stabilan."
            );
        }
        else
        {
            Console.WriteLine(
                "Gen nije stabilan."
            );
        }

        //////////////////////////////////////////////////////////////
        // 2.5 Najkraći podniz
        //////////////////////////////////////////////////////////////
        Console.WriteLine();
        Console.WriteLine("********** 2.5 **********");

        int maksimum =
            Math.Max(
                Math.Max(A, C),
                Math.Max(G, T)
            );

        string dodatak = "";

        dodatak += new string('A', maksimum - A);
        dodatak += new string('C', maksimum - C);
        dodatak += new string('G', maksimum - G);
        dodatak += new string('T', maksimum - T);

        Console.WriteLine(
            "Najkraci podniz: " + dodatak
        );
    }
}

Python rešenje

import math

##############################################################
# Funkcija za proveru pravilnosti stringa
##############################################################
def is_valid_string(s):

    freq = {}

    ##############################################################
    # Brojanje karaktera
    ##############################################################
    for c in s:

        if c not in freq:
            freq[c] = 0

        freq[c] += 1

    ##############################################################
    # Lista učestalosti
    ##############################################################
    counts = list(freq.values())

    counts.sort()

    ##############################################################
    # Ako su svi jednaki
    ##############################################################
    if counts[0] == counts[-1]:
        return True

    ##############################################################
    # Razlika 1
    ##############################################################
    if (
        counts[-1] - counts[0] == 1
        and
        counts[-1] > counts[-2]
    ):
        return True

    ##############################################################
    # Primer:
    # 1 2 2 2
    ##############################################################
    if (
        counts[0] == 1
        and
        counts[1] == counts[-1]
    ):
        return True

    return False


##############################################################
# Unos stringa
##############################################################
s1 = input("Unesite string: ")

##############################################################
# 2.1 ASCII niz
##############################################################
brojevi_niz = []

for c in s1:

    ##############################################################
    # ASCII vrednost
    ##############################################################
    broj = str(ord(c))

    ##############################################################
    # Dodavanje vodećih nula
    ##############################################################
    while len(broj) < 3:
        broj = "0" + broj

    brojevi_niz.append(broj)

print()
print("********** 2.1 **********")

##############################################################
# Obrada parnih indeksa
##############################################################
for i in range(0, len(brojevi_niz), 2):

    broj = brojevi_niz[i]

    ##############################################################
    # Cifre
    ##############################################################
    a = int(broj[0])
    b = int(broj[1])
    c = int(broj[2])

    ##############################################################
    # Aritmetička sredina
    ##############################################################
    sredina = math.ceil((a + b + c) / 3)

    ##############################################################
    # Novi string
    ##############################################################
    novi = (
        broj[0]
        + str(sredina)
        + broj[1]
        + str(sredina)
        + broj[2]
    )

    print(novi)

##############################################################
# 2.2 Provera pravilnosti
##############################################################
print()
print("********** 2.2 **********")

if is_valid_string(s1):
    print("String je pravilan.")
else:
    print("String nije pravilan.")

##############################################################
# 2.3 Formiranje gena
##############################################################
s2 = ""

for c in s1:

    c = c.upper()

    if c in ['A', 'C', 'G', 'T']:
        s2 += c

print()
print("********** 2.3 **********")

print("s2 =", s2)

##############################################################
# 2.4 Stabilnost gena
##############################################################
A = s2.count('A')
C = s2.count('C')
G = s2.count('G')
T = s2.count('T')

print()
print("********** 2.4 **********")

print("A =", A)
print("C =", C)
print("G =", G)
print("T =", T)

stabilan = False

##############################################################
# Provera stabilnosti
##############################################################
if len(s2) % 4 == 0:

    n = len(s2) // 4

    if (
        A == n
        and
        C == n
        and
        G == n
        and
        T == n
    ):
        stabilan = True

if stabilan:
    print("Gen je stabilan.")
else:
    print("Gen nije stabilan.")

##############################################################
# 2.5 Najkraći podniz
##############################################################
print()
print("********** 2.5 **********")

maksimum = max(A, C, G, T)

dodatak = ""

dodatak += "A" * (maksimum - A)
dodatak += "C" * (maksimum - C)
dodatak += "G" * (maksimum - G)
dodatak += "T" * (maksimum - T)

print("Najkraci podniz:", dodatak)
Last modified: Wednesday, 13 May 2026, 12:00 PM