C/C++

Кольцевой сдвиг массива

Дан массив A(n). Выполнить кольцевой сдвиг массива таким
образом, чтобы его минимальный элемент оказался на К-ом месте. Используйте дополнительную функцию в решении задачи.

Не знаю что написать в ringSense, помогите

 #include  
#include
#include

/*
Дан массив A(n). Выполнить кольцевой сдвиг массива таким
образом, чтобы его минимальный элемент оказался на К-ом месте
*/
int* ringSense();

int main(){

//Обозначение некоторых переменных
int k;
printf("Введите k: ");
scanf("%d", &k);

//Объявление массива
int n;
printf("\nВведите n: ");
scanf("%d", &n);
int A[n], B[n];

//Заполнение массива
int zapolnenie_flag, num;
srand(time(0));
printf("\nЗаполнение массива автоматическое(0)/ручное(1): ");
scanf("%d", &zapolnenie_flag);

//Ручное заполнение
if (zapolnenie_flag==1){
for (int i=0; i
 #include  
#include
#include

#define RAND(min, max) (rand() % ((max) - (min)) + (min))
#define BUFFER 12

void swap(int* a, int* b) {
int t = *a;
*a = *b;
*b = t;
}

void random_fill(int* box, int a, int b) {
size_t i = 0;
if (a > b) swap(&a, &b);
while (i < BUFFER) {
box[i] = RAND(a, b);
++i;
}
}

void show(int* box, int w) {
size_t i = 0;
while (i < BUFFER) {
printf("%*i", w, box[i]);
++i;
}
puts("");
}

void shift_left(int* box) {
size_t i = 1;
int first = box[0];
while (i < BUFFER) {
box[i - 1] = box[i];
++i;
}
box[i - 1] = first;
}

void shift_left_n(int* box, size_t n) {
size_t i = 0;
while (i < n) {
shift_left(box);
++i;
}
}

void shift_right(int* box) {
size_t i = BUFFER - 1;
int last = box[i];
while (i != 0) {
box[i] = box[i - 1];
--i;
}
box[i] = last;
}

void shift_right_n(int* box, size_t n) {
size_t i = 0;
while (i < n) {
shift_right(box);
++i;
}
}

size_t position_min(int* box) {
size_t j = 0;
size_t i = 1;
while (i < BUFFER) {
if (box[i] < box[j]) j = i;
++i;
}
return j;
}

void shift_min_pos(int* box, size_t k) {
size_t pos = position_min(box);
if (k == pos);
else if (k < pos) shift_left_n(box, pos - k);
else shift_right_n(box, k - pos);
}

int main(void) {
int box[BUFFER] = { 0 };
size_t k = 0;
srand((unsigned)time(NULL));
random_fill(box, 10, 100);
show(box, 4);
printf("k: ");
scanf("%zu", &k);
shift_min_pos(box, k);
show(box, 4);
show(box, 4);
return 0;
}
ЕШ
Евгений Шадренков
75 852
Лучший ответ
Запись массива A в массив B с кольцевым сдвигом на k позиций вправо:
 for (int i = 0; i < n; ++i) { B[(i + k) % n] = A[i]; } 
Запись массива A в массив B с кольцевым сдвигом на k позиций влево:
 for (int i = 0; i < n; ++i) { B[i] = A[(i + k) % n]; } 
Кирилл Керимов
Кирилл Керимов
94 699

Похожие вопросы