Есть массив 10 на 10, нужно посчитать суму квадратов элементов каждого столбца и отсортировать эти сумы по убыванию методом Шелла
Есть массив 10 на 10, нужно посчитать суму квадратов элементов каждого столбца и отсортировать эти сумы по убыванию методом Шелла Вот пример кода:
#include <iomanip>
int main()
{
const size_t Rows = 10;
const size_t Cols = 10;
int a[Rows][Cols] =
{
{ 0, 1, 2, 3, },
{ 4, 5, 6, 7, },
{ 8, 9, 10, 11, },
};
long long int sum[Cols];
for ( size_t col = 0; col < Cols; col++ )
{
sum[col] = 0;
for ( size_t row = 0; row < Rows; row++ )
{
sum[col] += a[row][col];
}
}
for ( size_t row= 0; row < Rows; row++ )
{
for ( size_t col = 0; col < Cols; col++ )
{
std::cout << std::setw( 2 ) << a[row][col] << ' ';
}
std::cout << std::endl;
}
std::cout << std::endl;
for ( long long int x : sum ) std::cout << std::setw( 2 ) << x << ' ';
std::cout << std::endl;
return 0;
}
Ответы (1 шт):
Вам нужно найти сумму квадратов элементов каждого столбца, а почему-то пишите:
sum[col] += a[row][col];То есть вы находите просто сумму столбца, а нужно сумму квадратов:
sum[col] += a[row][col] * (long long int)a[row][col];Насчет сортировки Шелла. Вы даже на начали её писать, хотя в интернете куча информации (ну или целого кода), так что тут я помогу лишь ссылками на источники.
Идея алгоритма (так же там есть и реализация на разных языках) и реализация алгоритма
Чтобы мой ответ не попадал под удаление по причине "Это ответ-ссылка (но не спам)", приведу реализацию алгоритма из последнего источника:
void ShellSort(int n, int mass[]) { int i, j, step; int tmp; for (step = n / 2; step > 0; step /= 2) for (i = step; i < n; i++) { tmp = mass[i]; for (j = i; j >= step; j -= step) { if (tmp < mass[j - step]) mass[j] = mass[j - step]; else break; } mass[j] = tmp; } }Только нужно учитывать, что массив у вас типа
long long int, а в реализацииint