Skocz do zawartości

learn code with me

Członkowie
  • Postów

    4
  • Dołączył

  • Ostatnio

Posty napisane przez learn code with me

  1. to podejście do sprawdzenia, czy liczba jest pierwsza, jest bliskie, ale nie do końca :D
    głównym problemem jest to, że zaczynasz pętlę for od 2 i idziesz aż do samej liczby, co oznacza, że zawsze znajdziesz przynajmniej jeden dzielnik (samą liczbę), co sprawia, że liczba pierwsza zawsze będzie False.

    liczba = int(input("Podaj dowolną liczbę: "))
    
    liczbapierwsza = True
    
    for dzielnik in range(2, int(liczba ** 0.5) + 1):
        if liczba % dzielnik == 0:
            liczbapierwsza = False
            print("Podana liczba", liczba, "jest podzielna przez", dzielnik)
            break  # Jeżeli znajdziemy jakikolwiek dzielnik, możemy przerwać pętlę
    
    if liczbapierwsza and liczba > 1:  # 1 nie jest liczbą pierwszą
        print("Podana liczba jest liczbą pierwszą")
    else:
        print("Podana liczba nie jest liczbą pierwszą")

    należy przerwać pętlę po znalezieniu pierwszego dzielnika (stąd break), ponieważ wtedy już wiemy, że liczba nie jest pierwsza
    użycie pierwiastka kwadratowego liczby jako górnego limitu pętli for jest bardziej wydajne, ale nie jest to konieczne dla tego zadania po prostu to standardowe zadanie jak wygooglasz to zobaczysz matematyczne tłumaczenia skąd pierwiastek

  2. Stare to ale może dorzucę odpowiedź dla potomnych  / leniwych
     

    #include <iostream>
    #include <fstream>
    #include <vector>
    #include <algorithm>
    #include <sstream>
    
    int main() {
        std::ifstream inputFile("input.csv");
        std::ofstream outputFile("output.csv");
    
        if (!inputFile.is_open() || !outputFile.is_open()) {
            std::cout << "Cannot open file!" << std::endl;
            return 1;
        }
    
        std::vector<int> numbers;
        std::string line, value;
    
        while (std::getline(inputFile, line)) {
            std::stringstream ss(line);
            while (std::getline(ss, value, ',')) {
                numbers.push_back(std::stoi(value));
            }
        }
    
        std::sort(numbers.begin(), numbers.end());
    
        for (size_t i = 0; i < numbers.size(); ++i) {
            outputFile << numbers[i];
            if (i < numbers.size() - 1) {
                outputFile << ",";
            }
        }
    
        inputFile.close();
        outputFile.close();
    
        std::cout << "Numbers sorted and saved in output.csv" << std::endl;
    
        return 0;
    }

     

  3. Wydaje się, że usuwasz węzły bez odpowiedniego zaktualizowania wskaźników nast dla sąsiednich węzłów. 

    Warunek dla dwa->dane <= K - usuwasz trzy węzły (jeden, dwa, trzy)

    gdy usuwasz trzy identyczne węzły i gdy dwa->dane <= K) aktualizujesz zaszuk i a w ten sam sposób,  może być mylące i prowadzić do błędów

    usuń trzy węzły tylko wtedy, gdy są one identyczne
    usuń tylko dwa węzły, gdy dwa->dane <= K
    aktualizuj ileJest odpowiednio dla obu przypadków

     

    void sznur::usun(int K)
    {
        Node *zaszuk = nullptr;
        Node *a = pocz;
        while (a != nullptr && a->nast != nullptr && a->nast->nast != nullptr)
        {
            Node *jeden = a;
            Node *dwa = a->nast;
            Node *trzy = a->nast->nast;
    
            if (jeden->dane == dwa->dane && dwa->dane == trzy->dane)
            {
                if (zaszuk != nullptr)
                {
                    zaszuk->nast = trzy->nast;
                }
                else
                {
                    pocz = trzy->nast;
                }
                delete jeden;
                delete dwa;
                delete trzy;
                ileJest -= 3;
                a = (zaszuk != nullptr) ? zaszuk->nast : pocz;
            }
            else if (dwa->dane <= K)
            {
                if (zaszuk != nullptr)
                {
                    zaszuk->nast = trzy;
                }
                else
                {
                    pocz = trzy;
                }
                delete jeden;
                delete dwa;
                ileJest -= 2;
                a = (zaszuk != nullptr) ? zaszuk->nast : pocz;
            }
            else
            {
                zaszuk = trzy;
                a = trzy->nast;
            }
        }
    }


     

  4. - W tym wypadku zamiast używać try-catch lepiej jest użyć odpowiednich warunków w pętlach.

    - W kodzie masz zagnieżdżone pętle, ale nie jest jasne, co chcesz osiągnąć wewnątrz nich.

    - Używasz HashSet do przechowywania unikalnych wartości, co jest dobrym pomysłem, ale nie zliczasz wystąpień tych wartości.

    Kod z przykładem jak zliczyć unikalne wartości oraz ich wystąpienia:

    import java.util.HashMap;
    import java.util.Map;
    
    public class Main {
        public static void main(String[] args) {
            int[][] tab = new int[][] {
                {1, 2, 3, 4, 5},
                {6, 7, 8, 9, 10},
                {11, 12, 13, 14, 15},
                {16, 17, 18, 19, 20},
                {16, 17, 18, 19, 20},
                {16, 17, 18, 19, 20},
                {16, 17, 18, 19, 20},
                {16, 17, 18, 19, 20}
            };
    
            // Używamy HashMap do przechowywania unikalnych wartości
            Map<Integer, Integer> countMap = new HashMap<>();
    
            for (int i = 0; i < tab.length; i++) {
                int lastElement = tab[i][tab[i].length - 1];  // ostatni element w rzędzie
    
                // Zliczanie 
                countMap.put(lastElement, countMap.getOrDefault(lastElement, 0) + 1);
            }
    
            // Wyświetlenie
            for (Map.Entry<Integer, Integer> entry : countMap.entrySet()) {
                System.out.println("Wartość: " + entry.getKey() + ", Liczba wystąpień: " + entry.getValue());
            }
        }
    }

     

    tu możesz znaleźć darmowy kurs Javy dla początkujących: https://codeme.pl/blog/java-dla-poczatkujacych

     

×
×
  • Utwórz nowe...