2015-02-14 6 views
-4

Я хочу найти наименьшее количество переходов из источника в пункт назначения. Мой вывод правильный, но время выполнения моей программы равно 1.0015 секунд, когда задано 100000 записей. Но мне нужно сделать программу в течение 1 секунды. Я много пробовал сократить время выполнения, но не смог. Может ли кто-нибудь помочь мне достичь времени выполнения в течение 1 секунды.Как улучшить время выполнения этой программы?

Образец Вход- 1 10 2

Образец output- 5

P.S- Программа выполняется дистанционно. Количество входов может быть < = 100000;

#include<stdio.h> 
int main() 
{ 
    unsigned int n, i, j, k, h,count=0,l=0; 
    scanf("%u", &n); 
    for (i=0;i<n;i++) 
    { 
     scanf("%u %u %u", &j, &k, &h); 
     l=j; 
     count = 0; 
     while(l<=k) 
     { 
      if(l%h==0) 
      { 
      count=count+1; 
      } 
      l++; 
     } 
     printf("%u\n", count); 
    } 
    return 0; 
} 
+1

Было бы лучше в [CodeReview.SE]? –

+2

Какова цель этого кода? –

+0

Вход будет исходной точкой, точкой назначения и расстоянием между точками. Выходной сигнал будет содержать число переходов, чтобы добраться до пункта назначения. Eg-Input-1,10,2 Выход = 5; –

ответ

1

Вы можете вычислить count переменные без while цикла, который, кажется, сосчитать, сколько элементов в [j, k], делятся на h (или, что то же, кратно h).

Чтобы сделать это, использовать те факты, что:

  1. Сумму чисел, меньших или равных x, делящиеся на k даются целой частью x/k, не считая 0.

  2. Если f(x, k) = int(x/k), то сумма чисел в [j, k], которые кратны h дается f(k, h) - f(j - 1, h).

Смежные вопросы