[ create a new paste ] login | about

Link: http://codepad.org/0AsygvID    [ raw code | output | fork ]

anmartex - C, pasted on Sep 24:
#include <stdio.h>
#include <stdlib.h>

typedef struct node_t
{
    int value;
    struct node_t* prev;
    struct node_t* next;
}   TNode;

typedef struct deque_t
{
    TNode* left;
    TNode* right;
}   TDeque;

//----------------------------------------------------------------------------
TDeque* PushRight(TDeque* deque, int value)
{
    TNode* node = malloc(sizeof(TNode));
    node->value = value;
    node->next = NULL;
    node->prev = deque->right;

    if (deque->left && deque->right)
    {
        deque->right->next = node;
        deque->right = node;
    }
    else
    {
        deque->left = deque->right = node;
    }

    return deque;
}
//----------------------------------------------------------------------------
TDeque GetDeque(const int* begin, const int* end)
{
    TDeque deque = {NULL, NULL};

    for (; begin < end; ++begin)
    {
        PushRight(&deque, *begin);
    }

    return deque;
}
//----------------------------------------------------------------------------
long long GetCalculation(const TDeque* deque)
{
    long long result = 1;

    TNode* first  = deque->left;  // x1
    TNode* second = first->next;  // x2
    TNode* last   = deque->right; // xn

    for (; second; first = second, second = second->next, last = last->prev)
    {
        // printf("%d %d %d\n", first->value, second->value, last->value);
        result *= first->value + second->value + 2 * last->value;
    }

    return result;
}
//----------------------------------------------------------------------------

int main()
{
    const int CArray[] = {1, 2, 3, 4, 5, 6, 7, 8, 9};
    const size_t CArraySize = sizeof(CArray) / sizeof(*CArray);

    TDeque deque = GetDeque(CArray, CArray + CArraySize);

    printf("result = %lld\n", GetCalculation(&deque));

    return 0;
}


Output:
1
result = 37822859361


Create a new paste based on this one


Comments: