• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

AL_10_12 - Żegnaj lato na rok

42 Warsaw Coding Academy
0 głosów
452 wizyt
pytanie zadane 29 kwietnia 2017 w SPOJ przez BinaryMan Stary wyjadacz (12,620 p.)

Witam !
Ma ktoś pomysł dlaczego dla tego kodu jest "przekroczono limit czasu" ? 
Zadanie: http://pl.spoj.com/problems/AL_10_12/

 

#include <iostream>

using namespace std;

unsigned long long int a=0,b=0,c=0;

unsigned long long int poczatek=0, koniec=0;

unsigned long long int liczby=0;


int main()
{

    cout << "Podja liczby calkowite: " << endl;
    cin>>a>>b>>c;

    if((a!=0)&&(b!=0)&&(c!=0))
    {
        cout << "Podja poczatek i koniec przedzialu: " << endl;

        while(cin>>poczatek>>koniec)
        {
            if((poczatek!=0)&&(koniec!=0))
            {
                for(unsigned long long int i=poczatek; i<=koniec; i++)
                {

                    if(i%a==0) liczby++;
                    else if(i%b==0) liczby++;
                    else if(i%c==0) liczby++;

                    //cout<<i<<endl;
                }

                cout<<liczby<<endl;
                poczatek=0;
                koniec=0;
                liczby=0;
            }

        }

    }

    return 0;
}

 

2 odpowiedzi

0 głosów
odpowiedź 30 kwietnia 2017 przez Michał628496 Pasjonat (17,340 p.)

Radzę wywalić wszystkie cout które nie wyświetlają wyniku bo inaczej będziesz miał ANS.

komentarz 30 kwietnia 2017 przez BinaryMan Stary wyjadacz (12,620 p.)
w czasie gdy poddaje kod ocenie , są one usunięte  i zostaje tyko ten co wyświetla liczby
0 głosów
odpowiedź 30 kwietnia 2017 przez niezalogowany

Wyrzuć te ify, bo nie są do niczego potrzebne. Wydaje mi się, że problem stanowi metoda. Podaj sobie jakiś duży zakres liczb (1-1000000000). Program będzie działał za wolno co tłumaczy wyskakiwanie na spoju komunikatu "przekroczono zakres czasu". Jeżeli masz podany dzielnik 2 i np zakres 1 - 1000 to jesteś w stanie określić ile tam jest liczb podzielnych przez 2. Nie musisz za każdym razem sprawdzać każdej liczby. Tylko problem jak przerobić to pod 3 liczby... Tyle podpowiedzi ;)

PS. Często używasz typu unsigned long long int - może warto skorzystać z typedef i nazwać sobie krócej ten typ?
 

typedef unsigned long long int ulong;

ulong a,b,c; 

 

komentarz 30 kwietnia 2017 przez BinaryMan Stary wyjadacz (12,620 p.)
Fakt mógłbym tak zrobić. A co do zadania to zakres liczb a,b i c jest ogromny o na prawdę ciężko wpaść na to jak zrobić to inną metodą jak takich właśnie if-ów :D

Podobne pytania

0 głosów
2 odpowiedzi 407 wizyt
pytanie zadane 26 lipca 2017 w SPOJ przez chucksqll Stary wyjadacz (12,930 p.)
0 głosów
1 odpowiedź 1,249 wizyt
pytanie zadane 19 października 2016 w C i C++ przez Paq_93 Początkujący (260 p.)
–1 głos
2 odpowiedzi 289 wizyt
pytanie zadane 6 sierpnia 2016 w C i C++ przez Skorpion1123 Nowicjusz (120 p.)

93,379 zapytań

142,380 odpowiedzi

322,533 komentarzy

62,734 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

VMware Cloud PRO - przenieś swoją infrastrukturę IT do chmury
...