Внимание, этот пост методически не доработан, но содержит работоспособный код и условие задачи.
Осенью на "Введении в программирование" мы со студентами решали следующую задачку:
Сформировать структуру данных - массив массивов, первый массив из одного элемента, каждый следующий больше предыдущего на один элемент. При этом всего элементов в массиве 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;
}