Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Defaktoryzacja

Ostatnio zmodyfikowano 2017-10-03 21:20
Autor Wiadomość
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
P-165415
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.
P-165417
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?
P-165420
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)
P-165423
Luq
» 2017-10-03 00:04:52
Fakt. Nie doczytałem, że w danych muszą być wszystkie dzielniki właściwe.
P-165426
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.
C/C++
#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;
}
P-165434
pekfos
» 2017-10-03 21:16:34
Pokazałeś, że potrafisz napisać sensownego fora, to skąd takie bzdury?
C/C++
while( k >= z )
{
    cin >> a;
    tab[ x ] = a;
    z++;
    x++;
}
Sam nawet nie możesz upilnować zmiennych w tym kodzie.
P-165435
Kinexity
» 2017-10-03 21:20:19
Ten kod to jakaś tragedia projektowa.

C/C++
#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.
P-165436
« 1 »
  Strona 1 z 1