Внимание, этот пост методически не доработан, но содержит работоспособный код и условие задачи.
Осенью на "Введении в программирование" мы со студентами решали следующую задачку:
Сформировать структуру данных - массив массивов, первый массив из одного элемента, каждый следующий больше предыдущего на один элемент. При этом всего элементов в массиве N. Выглядит, если заполнен числами от 1 до N примерно так:
1
2 3
4 5 6
...
.. (N-1) N
Основная проблема, естественно, возникла с вычислением количества строк в массиве массивов. Я выбрала формулу N-го треугольного числа для оценки количества строк.
Сформировать структуру данных - массив массивов, первый массив из одного элемента, каждый следующий больше предыдущего на один элемент. При этом всего элементов в массиве N. Выглядит, если заполнен числами от 1 до N примерно так:
1
2 3
4 5 6
...
.. (N-1) N
Основная проблема, естественно, возникла с вычислением количества строк в массиве массивов. Я выбрала формулу N-го треугольного числа для оценки количества строк.
#include "iostream" using namespace std; // getting the number of maximum triangle number // with value less then N // function return 0 for N < 0 int getMaxTriangleNumber(int N) { if (N <= 0) return 0; int tNumberValue = 1; int tNumberCounter = 1; while (tNumberValue < N) tNumberValue = ++tNumberCounter*(tNumberCounter + 1) / 2; return tNumberCounter; } // int** CreateJaggedArray(int n) { // calculate number of arrays int arrRowNumb = getMaxTriangleNumber(n); int** arr = new int*[arrRowNumb]; int rowItemNumCounter = 0; // number items in a row for (int i = 0; i < arrRowNumb; i++){ // the last not full row if (n < i) { arr[i] = new int[n]; rowItemNumCounter = n; } // regular full row else { arr[i] = new int[i + 1]; rowItemNumCounter = i + 1; } // filling the row for (int j = 0; j < rowItemNumCounter; j++){ arr[i][j] = n--; } cout << endl; } // free memory //for (int i = 0; i < arrRowNumb; i++) // delete[] arr[i]; //delete[]arr; return arr; } // Free memory proc void FreeMemOfJaggedArr(int** jarr) { for (int** curr = 0; curr != &jarr[sizeof(jarr)]; curr++) delete[] curr; delete[]jarr; } // N - total number of elements in jagged array void ShowJaggedArray(int** arr) { } int main() { cout << "Enter number of items: "; int n; cin >> n; if (n <= 0) cout << "Can't create an array"; else ShowJaggedArray(n); system("pause"); return 0; }