Ещё одна простая и очень старая задачка.

и задачки для интервью.
User avatar
tengiz
Уже с Приветом
Posts: 4468
Joined: 21 Sep 2000 09:01
Location: Sammamish, WA

Ещё одна простая и очень старая задачка.

Post by tengiz »

Для отсортированной последовательности посчитать среднее значение разницы между двумя соседними числами.

Или то же самое, но на SQL, в предположении, что есть таблица с одной колонкой, по которой построен индекс.
User avatar
AlexanderS
Уже с Приветом
Posts: 225
Joined: 07 Aug 2000 09:01
Location: Moscow, RU -> Chicago, IL

Ещё одна простая и очень старая задачка.

Post by AlexanderS »

How about that? The average difference of entire sequence is a difference between every item, divided by count, or, difference between last and first item of sequence divided by count. O(n).

C/C++:

#define MAXN 1000;
float n[MAXN];

float avgdiff()
{
    int i;
    float sumdiff = 0;
    for (i = MAXN-1; i > 0; i--)
    {
        sumdiff += n[i] - n[i-1];
    }

    return ( sumdiff/(MAXN-1) );
}

SQL:

CREATE TABLE mysequence
(
    myfield float
)

SELECT
    (MAX(myfield) - MIN(myfield))/(COUNT(myfield)-1)
FROM mysequence

By, Alexander.

[ 17-01-2002: Message edited by: AlexanderS ]</p>
User avatar
listen_me_now
Новичок
Posts: 86
Joined: 27 Feb 2001 10:01
Location: Omsk , Russia

Ещё одна простая и очень старая задачка.

Post by listen_me_now »

Боюсь ошибиться , но все гораздо проще :
нужно от последнего числа отнять первое
и все поделить на (n-1)
Вот :

srand((unsigned)time( NULL ) );
int a[10] ;
double s = 0 ;
double sumdiff = 0 ;
for(int tt = 0 ; tt<10 ; tt++)
{
a[tt]= rand()%100+100*tt;
if (tt==0) printf("a[0]= %d\n",a[tt]);
else if (tt>0)
{
s += a[tt]-a[tt-1] ;
printf("a[%d]= %d avg=%d\n",tt,a[tt],a[tt]-a[tt-1]);
}
}

double sss = (a[9]-a[0])/9;
printf(" s= %5.3f sss= %5.3f \n",s/9,sss);

Return to “Головоломки”