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.
[C++] Liczby trzycyfrowe
[C++] Liczby trzycyfrowe
Ostatnio zmieniony 27 mar 2021, o 09:50 przez Afish, łącznie zmieniany 1 raz.
Powód: Poprawa wiadomości.
Powód: Poprawa wiadomości.
-
- 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++
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ł.
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ł.
-
- 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++
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.
Re: [C++] Liczby trzycyfrowe
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.
Pokazujemy tym samym, że:
1. potrafimy zadeklarować tablicę i zdefiniować jej zawartość z użyciem listy inicjalizującej (),
2. umiemy korzystać z pętli foreach (),
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).
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;
}
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).
Re: Liczby trzycyfrowe - c++
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;
}
}