Defaktoryzacja
Ostatnio zmodyfikowano 2017-10-03 21:20
milmega Temat założony przez niniejszego użytkownika |
Defaktoryzacja » 2017-10-02 21:30:11 Potrzebuję pomocy w zadaniu. Chodzi mi o wytłumaczenie co i dlaczego, bo mniej wiecej wiem jak to zrobić, ale nie umiem tego napisać w cpp.
Liczba naturalna a jest właściwym dzielnikiem n, wtedy gdy n jest wielokrotnością a oraz a nie jest równe 1 lub n. Dane są wszystkie właściwe dzielniki liczby n nie większej niż 1000000. Napisz program, który obliczy n.
Wejście W pierwszej linii znajduje się liczba testów T (T<100). W każdej następnej linii znajduje się opis pojedynczego testu. Na opis testu składa się liczba k (0 < k < 51), a następnie k liczb naturalnych nie większych niż 1000000 - są to właściwe dzielniki pewnej liczby n.
Wyjście Twój program w i-tej linii powinien wypisać jedną liczbę n - odpowiedź dla i-tego testu. Przykład
Dla danych wejściowych 3 1 2 2 4 2 6 3 4 2 12 6 8 poprawną odpowiedzią jest 4 8 24
|
|
Kinexity |
» 2017-10-02 21:43:48 Z dzielników wyciągasz rozkład liczby na czynniki pierwsze i mnożysz je.
EDIT: Lepsza i szybsza metoda - znajdujesz największy dzielnik i najmniejszy (większy od 1) a potem mnożysz przez siebie. |
|
Luq |
» 2017-10-02 22:29:18 znajdujesz największy dzielnik i najmniejszy (większy od 1) a potem mnożysz przez siebie. |
Jak masz 3, 5, 7, to odpowiedzią jest 3 * 7 = 21? |
|
Kinexity |
» 2017-10-02 23:32:17 Jeżeli usuniesz 5 spośród dzielników to tak (inaczej ten zbiór nie spełnia warunku zawierania WSZYSTKICH dzielników właściwych niezależnie od liczby) |
|
Luq |
» 2017-10-03 00:04:52 Fakt. Nie doczytałem, że w danych muszą być wszystkie dzielniki właściwe. |
|
milmega Temat założony przez niniejszego użytkownika |
» 2017-10-03 21:04:29 Stworzyłem coś takiego, lecz jest program nie działa jak powinien. Niestety nie mogę zlokalizować, gdzie zrobiłem błąd. #include <iostream>
using namespace std;
int main() { int t, k, a, z = 1, x = 0; int tab[ 50 ]; int max, min; cin >> t; int liczba[ t ]; for( int i = 0; i < t; i++ ) { cin >> k; while( k >= z ) { cin >> a; tab[ x ] = a; z++; x++; } max = tab[ 0 ]; min = tab[ 0 ]; for( int i = 1; i < x; i++ ) { if( max < tab[ i ] ) max = tab[ i ]; } for( int i = 1; i < x; i++ ) { if( min > tab[ i ] ) min = tab[ i ]; } liczba[ t ] = min * max; } for( int i = 0; i < t; i++ ) { cout << liczba[ i ] << endl; } return 0; }
|
|
pekfos |
» 2017-10-03 21:16:34 Pokazałeś, że potrafisz napisać sensownego fora, to skąd takie bzdury? while( k >= z ) { cin >> a; tab[ x ] = a; z++; x++; } |
Sam nawet nie możesz upilnować zmiennych w tym kodzie. |
|
Kinexity |
» 2017-10-03 21:20:19 Ten kod to jakaś tragedia projektowa. #include <iostream> #include <limits> using namespace std;
int main() { int num_of_seq, nums_in_seq, temp, max, min; cin >> num_of_seq; int * liczba = new int[ num_of_seq ]; for( int i = 0; i < num_of_seq; i++ ) { min = numeric_limits < int >::max(); max = int(); cin >> nums_in_seq; for( int j = 0; j < nums_in_seq; j++ ) { cin >> temp; if( max < temp ) max = temp; if( min > temp ) min = temp; } cout << min * max << endl; } delete[] liczba; return 0; } Jednoliterowe zmienne to piekło w momencie poszukiwania błędów, więc unikaj ich. |
|
« 1 » |