Для ряда натуральных чисел длиной N>2 представленного в виде списка, построить последовательность: A1+A3, A2+A4, . . . An-2+An. Алгоритм: #include <iostream> using std::cout; using std::endl; void makeList(int N); // создает ряд натуральных чисел от 1 до N посредством списка void makeSequence(int N, int *ptr); // строит исходную последовательность A1+A3, A2+A4, . . . An-2+An // список struct List { int n; // здесь хранится натуральное число List* next; // ссылка на следующий элемент списка } *start, *last; // указатели на начало и конец натурального ряда int main() { const int N = 10; // длина ряда натуральных чисел задается здесь start = NULL; // инициализируем указатель int a[N]; // здесь будем хранить элементы искомой последовательности List *p, *p1; makeList(N); makeSequence(N, a); p = start; cout << "Here is the natural sequence( N = " << N << " ): " << endl; // выводим ряд натуральных чисел while(p != NULL) { cout << (p->n) << " "; p = p -> next; } cout << endl; // освобождаем память while (p != NULL) { p1 = p -> next; delete p; p = p1; } // выводим искомую последовательность cout << "Required sequence: " << endl; for(int j = 0; j < N-2; j++) cout << a[j] << " "; return 0; } void makeList(int N) { List* p; if( start == NULL) { start = new List; // создаем первый элемент списка start -> n = 1; // записываем первое натуральное число в первый элемент списка start -> next = NULL; last = start; } for(int i = 2; i <= N; i++) // начиная со 2го { p = new List; // создаем следующий элемент списка p -> n = i; // записываем очередное натуральное число p -> next = NULL; last -> next = p; // соединяем первый элемент со вторым и так далее.. last = p; // теперь оба указателя указывают на один и тот же элемент } } void makeSequence(int N, int *ptr) { List *p, *p2; int tmp; // сюда будем записывать A1+A3, A2+A4... p = start; for(int i = 1; i <= N; i++) { tmp = 0; tmp = p -> n; // записываем элемент А(n-2) p2 = p; // посредством вспомагательного указателя доходим до элемента А(n) for (int k = 0; k < 2; k++) { if(p2 -> next == NULL) break; // check p2 = p2 -> next; } tmp += (p2 -> n); // складываем А(n-2) и А(n) *ptr = tmp; // результат записываем в a[i] ptr++; // i++) if(p2 -> next == NULL) break; // check p = p -> next; // переходим к следующему элементу списка } }
Ключевые слова:
список, последовательность, перестановка, массив
|
|||