szukanie zaawansowane
 [ Posty: 9 ] 
Autor Wiadomość
Mężczyzna Offline
PostNapisane: 7 maja 2018, o 20:00 
Użytkownik

Posty: 62
Mam zadanie którego treść brzmi następująco:
Znalezc wszystkie 2-cyfrowe liczby, które dziela sie przez sume ich cyfr.

Od razu przedstawię mój kod to będzie widać gdzie jest problem.
Ukryta treść:    

Stworzyłem tablicę dynamiczną, która przechowuje same liczby dwucyfrowe. Z tego co mi intuicja podpowiada to rozdzielenie tych liczb można zrobić bardzo prosto przy użyciu modulo jednakże nie wiem jak to uczynić.

Czyli: nie potrafię znaleźć spośród tych liczb dwucyfrowych takich, które dzielą się przez sumę ich cyfr.

#edit

Zrobiłem coś takiego i chyba działa ale brzydko... Może ktoś z jakąś sugestią?

Ukryta treść:    
Góra
Mężczyzna Offline
PostNapisane: 7 maja 2018, o 20:19 
Użytkownik

Posty: 64
Lokalizacja: nie wiem
https://stackoverflow.com/questions/4261589/how-do-i-split-an-int-into-its-digits

Kod:
1
2
3
4
5
int number = 12345;

int digit = number % 10; // digit = 5
number = number / 10; // number = 1234

czyli
Kod:
1
2
3
4
5
int number = 12;

int first = number % 10; // digit = 2
int second = number / 10; // number = 1

zrób to dla każdego elementu, potem
Kod:
1
2
3
4
if ((second + first) % number == 0) {
    //wow you did it
}


-- 7 maja 2018, o 20:23 --

Wyprzedziłeś mnie :p, takie rozwiązanie jak dla mnie jest spoko, nie znam się na c++ więc nie powiem Ci czy nie ma lepszego sposobu, albo wbudowanej funkcji - poszukaj, jak nie znajdziesz to zostawisz to swoje ;)
Góra
Mężczyzna Offline
PostNapisane: 7 maja 2018, o 20:23 
Użytkownik

Posty: 62
Mógłbyś zerknąć na kod, który wstawiłem pewnie podczas gdy odpowiadałeś i powiedzieć czy to jest to samo co napisałeś i co można tam ewentualnie poprawić?

Pytałem gdzieś kogoś to powiedziano mi nawet, że można to ładnie zrobić bez tablic i w ogóle. Chciałbym żeby to zostało napisane jak najkrócej. Poczekam może ktoś kto się tym zajmuje napisze coś mądrego :P.
Dzięki za chęci tak swoją drogą.
Góra
Mężczyzna Offline
PostNapisane: 7 maja 2018, o 20:30 
Użytkownik

Posty: 64
Lokalizacja: nie wiem
Jeśli, chcesz to uprosić to po co robić dwie tablice, lecisz w pętli od 10 do 99 i od razu sprawdzasz warunek, jeśli true to wrzuć sobie do tablicy, vektora czy co tam lubisz ;)
Góra
Mężczyzna Offline
PostNapisane: 7 maja 2018, o 20:32 
Użytkownik

Posty: 62
Zaraz spróbuję to zrobić tak jak napisałeś ale o wektorze pierwszy raz słyszę a uczę się prawie rok programowania.

Wydaje mi się, że o to chodziło, tak? Jest okej? :P
Ukryta treść:    
Góra
Mężczyzna Offline
PostNapisane: 7 maja 2018, o 20:49 
Użytkownik

Posty: 64
Lokalizacja: nie wiem
Jest ok, ale można ładniej
Kod:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#include < iostream >

using namespace std;

private bool isValid(int first, int second, int number) {
  return number % (first + second) == 0;
}

int main() {
    vector < int > list;
    for (int i = 10; i <= 99; i++) {
     int first = i % 10;
     int second = i / 10;
      if (isValid(first, second, i) {
          list.push_back(i);
        }
      }

      // WRITE
      for (int i = 0; i < list.size(); i++) {
        cout << list[i] << endl;
      }

      system("pause");
      return 0;
}


-- 7 maja 2018, o 20:51 --

PS. zawsze można "ładniej"(u mnie np. formatowanie kodu jest brzydkie) ;), to Twoje jest całkiem w porządku.
Góra
Mężczyzna Offline
PostNapisane: 7 maja 2018, o 20:54 
Użytkownik

Posty: 62
Nie będę robił na wektorach bo nikt nigdy nam tego nie pokazywał i potem będzie, że używam czegoś czego nie rozumiem nawet ;P
Góra
Mężczyzna Offline
PostNapisane: 7 maja 2018, o 20:59 
Użytkownik

Posty: 591
Lokalizacja: Radom
Powyższy kod sypie mi licznymi błędami (kompilator g++).

Najprościej jest chyba bez tablic, z wypisywaniem wyników na miejscu:
Kod:
1
2
3
4
5
6
7
8
9
10
11
12
#include <iostream>
using namespace std;
int main() {
  for (int i = 10; i <= 99; i++) {
    int first = i % 10;
    int second = i / 10;
    if (i % (first+second) == 0)
      cout << i << endl;
  }
  return 0;
}
Góra
Mężczyzna Offline
PostNapisane: 7 maja 2018, o 21:01 
Użytkownik

Posty: 62
Robiłem powyższy program w Visual Studio najnowszej wersji i wszystko śmiga. Twoja opcja jest mega i naprawdę intuicyjna ale tak to jest jak się coś wymyśli i brnie w tym do końca jak koń z klapkami na oczach.

Ostateczna wersja u mnie wygląda tak gdyby ktoś kiedyś odkopał ten temat i byłby przydatny:
Ukryta treść:    
Góra
Utwórz nowy temat Odpowiedz w temacie  [ Posty: 9 ] 


 Zobacz podobne tematy
 Tytuł tematu   Autor   Odpowiedzi 
 [C] Najdłuższe wspólne podsłowo-problem z implementacją.  Chungu  0
 Dynamiczna alokacja pamięci. Problem.  macmika  13
 niecodzienny problem dotyczący programu finansowego  matti90  3
 C++ odczyt i zapis pliku mały problem kod juz jest  17monika171  2
 [c++][visual studio] problem z pobieraniem danych z konsoli  transatlantyk a  0
 
Atom [Regulamin Forum] [Instrukcja LaTeX-a] [Poradnik] [F.A.Q.] [Reklama] [Kontakt]
Copyright (C) Karpatka.pl