#include "pch.h"
#include <iostream>
#include <Windows.h>
using namespace std;
void sdvig(int * m, int size, int sdv) {
int max = *m;
bool s = false;
for(int i = 1; i < size; i++) {
if (m[i] > max)
max = m[i];
}
for (int * p = m; *p <= size; p++) {
*p = (p - m) + (sdv + 1);
}
int num = 0;
while (!s) {
for (int i = 0; i < size; i++) {
if (m[i] <= max) num++;
else s = 1;
}
}
for (int * p = m + num; *p <= size; p++) {
*p = (p - (m + num)) - 5;
}
for (int j = 0; j < size; j++) cout << m[j] << endl;
cout << " " << num << endl;
}
int main(int argc, const char * argv[]) {
int m[5] = { 1, 2, 3, 4, 5 };
sdvig(m, 5, 2);
cin.get();
return 0;
}
У меня такая проблема: мне нужно сдвинуть все элементы массива влево на 2. То есть если начальный массив {1, 2, 3, 4, 5}, то должно получиться {3, 4, 5, 1, 2}. В чем моя ошибка? Исправьте, если не трудно.
Чтоб обойтись без всяких временных массивов, проще всего развернуть массив - сначала весь, а потом две части:
void reverse(int * a, int begin, int end)
{
for(int i = begin, j = end; i < j; ++i, --j)
{
int t = a[i];
a[i] = a[j];
a[j] = t;
}
}
void rotate(int * a, int size, int count)
{
reverse(a,0,size-1);
reverse(a,0,count-1);
reverse(a,count,size-1);
}
Это, конечно, если религия (или преподаватель) категорически запрещают использовать стандартную функцию rotate()
...
Для сдвига массива лучше использовать memcpy и memmove.
#include <cstring>
#include <iostream>
void shift_left(int *arr, int size, int offset) {
// массив для хранения элементов, которые перенесутся в конец
int *tmp = new int[offset];
// копируем во временный массив элементы, которые перенесутся в конец
std::memcpy(tmp, arr, offset * sizeof(int));
// сдвигаем элементы, начиная с arr[offset], на offset влево
std::memmove(arr, &arr[offset], (size - offset) * sizeof(int));
// копируем элементы из временного массива в конец исходного
std::memcpy(&arr[size - offset], tmp, offset * sizeof(int));
delete[] tmp;
}
int main(int argc, char *argv[]) {
int m[5] = {1, 2, 3, 4, 5};
shift_left(m, 5, 2);
for (int i = 0; i < 5; ++i) {
std::cout << m[i] << ' ';
}
std::cout << std::endl;
}
Виртуальный выделенный сервер (VDS) становится отличным выбором
Как мне заполнить массив вводом с клавиатуры через цикл, чтобы при присваивании элементам массива значений и при нажатии Enter курсор не перебегал...
Подскажите пожалуйста, есть функция для GET запроса через WinInetОна отлично отрабатывает на Win10 (мой домашний ПК) и на Win7 (один из серверов)
Как можно скопировать из указателя на int в новую переменную, пытаюсь
Программа выводи количество, цену, общую сумму, но не выводит номер товара и его названиеЧто не так?