[C++] Liczby trzycyfrowe

alek121
Użytkownik
Użytkownik
Posty: 1
Rejestracja: 17 mar 2021, o 09:29
Płeć: Mężczyzna
wiek: 32

[C++] Liczby trzycyfrowe

Post autor: alek121 »

Zadanie jest następujące :

Napisz program w c++ wypisujący na standardowe wyjscie w kolejności rosnącej wszystkie liczby trzycyfrowe, których setki to : 1,2,5,6,7,9 , cyfra dziesiątek to potęga dwójki , cyfra jedności jest parzysta , a suma cyfr dzieli się przez 7. Program wypisuje te liczby przy odpowiednich pętli i załącza tylko plik nagłówkowy iostream.

Bardzo proszę o pomoc.
Ostatnio zmieniony 27 mar 2021, o 09:50 przez Afish, łącznie zmieniany 1 raz.
Powód: Poprawa wiadomości.
Ponury123
Użytkownik
Użytkownik
Posty: 128
Rejestracja: 5 lip 2015, o 14:48
Płeć: Mężczyzna
Lokalizacja: nie wiem
Podziękował: 11 razy
Pomógł: 24 razy

Re: Liczby trzycyfrowe - c++

Post autor: Ponury123 »

Sposób prosty:
1. Zrób pętlę od 100 do 999; -> (np. for())
2. W każdej iteracji sprawdzaj czy liczba spełnia podane kryteria -> funkcja warunkowa (if)
3. Jeśli spełnia wypisz liczbę -> (cout)

Koniec.

Można by pokombinować, aby przyspieszyć program -> zmniejszyć ilość iteracji.
Btw. polecenie mówi, że program ma wypisać, a nie znaleźć, więc od biedy możesz ręcznie znaleźć te liczby, zahardkodować je, a później wypisać. Prowadzący raczej tego sposobu nie pochwali, ale będzie on zgody ze specyfikacją, więc ja bym się kłócił.
pesel
Użytkownik
Użytkownik
Posty: 1707
Rejestracja: 8 cze 2010, o 13:09
Płeć: Mężczyzna
Podziękował: 1 raz
Pomógł: 412 razy

Re: Liczby trzycyfrowe - c++

Post autor: pesel »

alek121 pisze: 17 mar 2021, o 09:42 cyfra dziesiątek to potęga dwójki
Chyba dowolną cyfrę da się przedstawić jako potęgę dwójki?

Dodano po 3 godzinach 44 minutach 49 sekundach:
Z wyjątkiem zera, rzecz jasna.
Dudenzz
Użytkownik
Użytkownik
Posty: 93
Rejestracja: 8 mar 2009, o 18:21
Płeć: Mężczyzna
Pomógł: 19 razy

Re: [C++] Liczby trzycyfrowe

Post autor: Dudenzz »

Ciekawszym rozwiązaniem byłoby następujące:

Po pierwsze; w tym przypadku cyfry jedności, setek oraz dziesiątek są niezależne od siebie, możemy oznaczyć je po prostu jako trzy zmienne \(\displaystyle{ x}\), \(\displaystyle{ y}\) i \(\displaystyle{ z}\).

Wiemy, że \(\displaystyle{ x \in \{1,2,5,6,7,9\}}\), \(\displaystyle{ y \in \{1,2,4,8\}}\), \(\displaystyle{ z \in \{0,2,4,6,8\}}\) oraz \(\displaystyle{ (x+y+z) \% 7=0, k \in \mathcal{C}}\). Napiszmy zatem program, który znajdzie takie permutacje elementów pochodzących z podanych zbiorów, które spełniają ostatni z podanych warunków.

Kod: Zaznacz cały


#include <iostream>


int main()
{
    int X[] = {1,2,5,6,7,9};
    int Y[] = {1,2,4,8};
    int Z[] = {0,2,4,6,8};
    for(int x: X)
    for(int y: Y)
    for(int z: Z)
        if ((x+y+z)%7==0) std::cout << x<<y<<z<<std::endl;
    return 0;
}

Pokazujemy tym samym, że:
1. potrafimy zadeklarować tablicę i zdefiniować jej zawartość z użyciem listy inicjalizującej (

Kod: Zaznacz cały

https://www.learncpp.com/cpp-tutorial/dynamically-allocating-arrays/
),
2. umiemy korzystać z pętli foreach (

Kod: Zaznacz cały

https://www.learncpp.com/cpp-tutorial/for-each-loops/
),
3. rozumiemy, że, mimo, iż złożoność naszego programu będzie wyrażona na pozór bardziej skomplikowanym wyrażeniem \(\displaystyle{ \mathcal{O}(mno)}\) (bardziej skomplikowanym od \(\displaystyle{ \mathcal{O}(n)}\)), to program w każym przypadku będzie wykonywał się szybciej - mamy mniej warunków i łączna liczba kroków jest mniejsza (innymi słowy, \(\displaystyle{ n}\) w tym rozwiązaniu jest czym innym, niż \(\displaystyle{ n}\) w rozwiązaniu najprostrzym).
givrox7
Użytkownik
Użytkownik
Posty: 5
Rejestracja: 17 paź 2021, o 01:24
Płeć: Mężczyzna

Re: Liczby trzycyfrowe - c++

Post autor: givrox7 »

pesel pisze: 17 mar 2021, o 14:00
alek121 pisze: 17 mar 2021, o 09:42 cyfra dziesiątek to potęga dwójki
Chyba dowolną cyfrę da się przedstawić jako potęgę dwójki?

Dodano po 3 godzinach 44 minutach 49 sekundach:
Z wyjątkiem zera, rzecz jasna.
W domyśle "dodatnia i całkowita potęga dwójki", trochę czepianie się słówek.

Jeśli chodzi o rozwiązanie, to proponuję coś takiego:

Kod: Zaznacz cały

#include <iostream>

int main()
{
  for(int i = 100; i < 1000; i++){
    int setki = i/100;
    int dziesiatki = (i/10)%10;
    int jednosci = i%10;
    if ((setki != 3 && setki != 4 && setki != 8) // warunek na cyfre setek
         && (dziesiatki == 2 || dziesiatki == 4 || dziesiatki == 8) // warunek na cyfre dziesiatek
         && (jednosci  % 2 == 0) // cyfra jednosci parzysta
         && ((setki  + dziesiatki + jednosci) % 7 == 0)) // suma cyfr podzielna przez 7
      std::cout << setki << dziesiatki << jednosci << std::endl;
  }
}

ODPOWIEDZ