Skocz do zawartości

learn code with me

Członkowie
  • Postów

    4
  • Dołączył

  • Ostatnio

learn code with me's Achievements

Newbie

Newbie (1/14)

  • Reacting Well Rare
  • First Post Rare

Recent Badges

0

Reputacja

  1. to podejście do sprawdzenia, czy liczba jest pierwsza, jest bliskie, ale nie do końca 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...