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

Sumowanie elementów na wyjściu

Ostatnio zmodyfikowano 2013-11-10 18:41
Autor Wiadomość
Miralem
Temat założony przez niniejszego użytkownika
Sumowanie elementów na wyjściu
» 2013-11-10 01:16:49
Treść zadania:
Naukowcy z całego świata postanowili wybrać Liczbę Roku 2012. Ustalili, że wybór odpowiedniej liczby powinien mieć coś wspólnego z podzielnością. Stworzyli długą listę liczb, które ich zdaniem byłyby dobrymi kandydatami na dzielniki Liczby Roku. Ponieważ każdy naukowiec dopisywał swoje liczby nie oglądając się na innych, na liście tej mogą występować powtórzenia. Wydawałoby się, że wybór Liczby Roku powinien być teraz łatwy, ale doradcy do spraw PR doszli do wniosku, że przyjęcie bardzo dużej wartości byłoby niekorzystne. Naukowcy muszą wybrać liczbę nie większą niż milion. Rozważają kandydatury różnych ciekawych liczb i dla każdej z nich chcą się dowiedzieć, ile liczb z przygotowanej listy jest jej dzielnikami.

Wejście

W pierwszej linii wejścia znajduje się liczba naturalna n (1<=n<=200000), określająca długość listy potencjalnych dzielników Liczby Roku 2012. W kolejnej linii podane są elementy tej listy, będące liczbami naturalnymi z zakresu od 1 do 1000. W trzeciej linii znajduje się liczba naturalna m (1<=m<=10), oznaczająca liczbę rozważanych kandydatów na Liczbę Roku. W kolejnych m liniach znajdują się te liczby (całkowite, z zakresu od 1 do 1000000).

Wyjście

Dla każdego kandydata na Liczbę Roku wypisz w osobnej linii, ile liczb z listy przygotowanej przez naukowców jest jego dzielnikami.

Przykład

Wejście:

5
2 1 7 3 2
2
8
11

Wyjście:

3
1
Mój kod:
C/C++
#include <iostream>

int main() {
    int x, t1[ 20 ], y, t2[ 10 ];
    std::cin >> x;
    for( int i = 1; i <= x; i++ ) {
        std::cin >> t1[ i ];
    }
    std::cin >> y;
    for( int j = 1; j <= y; j++ ) {
        std::cin >> t2[ j ];
        for( int i = 1; i <= x; i++ ) {
            int suma = 0;
            if( t2[ j ] % t1[ i ] == 0 ) {
                suma = suma + 1;
            }
            std::cout << suma << std::endl;
        }
    }
    return 0;
}

Z grubsza udało mi się to zaimplementować, ale zamiast jednego wyniku (np. 2), pokazują się poszczególne wyniki niezsumowane (np. 0 1 0 1) i przyznam, że nie mam pomysłu, gdzie i jak wcisnąć jeszcze formułę, by mi to sumowało (bo myślałem, że już ten program to zrobi). Liczę na szybką pomoc i z góry dziękuję.

Kod i treść zadania wklejamy na forum, nie zewnętrzne hostingi - xevuel
P-95850
pekfos
» 2013-11-10 12:35:01
Niepoprawnie używasz tablic.

C/C++
int suma = 0;
if( t2[ j ] % t1[ i ] == 0 ) {
    suma = suma + 1;
}
std::cout << suma << std::endl;
To nie ma możliwości wypisania innej wartości, niż 0 i 1.
P-95854
Miralem
Temat założony przez niniejszego użytkownika
» 2013-11-10 12:40:07
A w jakim przypadku będzie taka możliwość?
P-95857
pekfos
» 2013-11-10 12:41:43
Że ten kod wypisze inną wartość? W żadnym. Musisz, na prawdę, nie rozumieć swojego kodu, jeśli nie widzisz, dlaczego tak jest.
P-95858
Miralem
Temat założony przez niniejszego użytkownika
» 2013-11-10 12:51:29
Dzięki, wiem o wiele więcej, niż przed zamieszczeniem tutaj mojego problemu...
P-95863
pekfos
» 2013-11-10 13:00:08
Porównaj te dwa kody:
C/C++
for(;; )
{
    int suma = 0;
    std::cout << suma;
    suma++;
}
C/C++
int suma = 0;
for(;; )
{
    std::cout << suma;
    suma++;
}
P-95869
Miralem
Temat założony przez niniejszego użytkownika
» 2013-11-10 13:05:02
C/C++
for( int i = 1; i <= x; i++ ) {
    int suma = 0;
    if( t2[ j ] % t1[ i ] == 0 ) {
        suma = suma + 1;
        std::cout << suma << std::endl;
        suma++;
    }
teraz wypisuje mi już same prawdy, jedynki, bez zer, ale wciąż bez sumy.
P-95874
pekfos
» 2013-11-10 13:07:37
Porównaj kody, które podałem. Chcesz uzyskać efekt z drugiego, a robisz to, co w pierwszym.
P-95876
« 1 » 2 3
  Strona 1 z 3 Następna strona