2016-02-05 2 views
1

«Напишите программу, которая позволяет пользователю вводить целое число для размера массива. Рекомендуется использовать Malloc. Произвольно генерировать целое число для каждого элемента массива. несильно, чтобы повернуть массив Вращение массива означает, что каждый элемент сдвигается вправо или влево на один индекс, а последний элемент массива также перемещается на первое место»C Программирование - перемещение элементов в массиве

. Пример: 31 83 91

В каком направлении перемещаться и сколько раз? - Слева

Сколько раз вы хотели бы сменить? 2

Конечный результат: 91 31 83

В настоящее время мой код. Это не смещается.

#include <stdio.h> 
#include <stdlib.h> 

int main(){ 

int i, temp, swapped; 
int SlotNumber; 
int *ptr; 
char direction; 
int ShiftAmount; 

printf("How many slots would you like in your array?\n"); 
scanf("%d", &SlotNumber); 
for(i=0;i<SlotNumber;i++){ 
    printf("%d \t", rand()); 
} 
ptr = (int *)malloc(SlotNumber*sizeof(int)); 

printf("\nWhich direction would you like to shift it to? R/L?\n"); 
scanf(" %c", &direction); 
printf("\nHow many times would you like to shift?\n"); 
scanf("%d", &ShiftAmount); 

if((direction=='R')||(direction=='r')){ 
    while(1){ 
     swapped = 0; 
     for(i=0;i<ptr+1;i++){ 
      if(ptr[1]>ptr[i+ShiftAmount]){ 
       int temp = ptr[i]; 
       ptr[i] = ptr[i+ShiftAmount]; 
       ptr[i+ShiftAmount] =temp; 
       swapped = 1; 
      } 
     } 
     if(swapped == 0); 
     break; 
    } 
} 
printf("\nNewList\n"); 
for(i=0;i<ptr;i++){ 
    printf("%d \t",ptr[i]); 
} 

return 0; 
} 
+0

1) Вы не заполняете массив ptr ничем. 2) Вам просто нужно сдвинуть элементы. Вам все равно, каковы их значения, поэтому нет причин проверять, превышает ли значение элемента значение другого элемента. Однако вам нужно проверить, находится ли новая позиция внутри границ массива и предпринять соответствующие действия, если это не так. – FredK

+0

Текст говорит, что вам нужно сдвинуть элемент '1'. Однако пример запрашивает у пользователя «сколько раз», которые они хотят сдвинуть. Таким образом, по существу это сдвиг элементов 'n'. Смещение с помощью элементов 'n' является более общей и более интересной задачей, чем смещение на' 1'. Итак, что на самом деле требуется? Сдвинуть на '1' или сдвинуть на' n'? Или требуется выполнить сдвиг на 'n' через последовательные смены на' 1'? – AnT

ответ

1

Были проблемы с кодом. Здесь улучшено решение с левым сдвигом, вправо сдвиг я оставляю вам.

#include <stdio.h> 
#include <stdlib.h> 
#include <time.h> 


int main() 
{ 

    int i, j; 
    int SlotNumber; 
    int *ptr; 
    int ShiftAmount; 
    int temp; 

    srand(time(NULL)); 

    printf("How many slots would you like in your array?\n"); 
    scanf("%d", &SlotNumber); 

    ptr = malloc(SlotNumber*sizeof(int)); 

    // Fill array with random numbers 
    for(i=0;i < SlotNumber; i++) 
    { 
     ptr[i]=rand(); 
     printf("%d \t",ptr[i]); 

    } 

    printf("\nHow many times would you like to shift?\n"); 
    scanf("%d", &ShiftAmount); 


    for(i=0; i < ShiftAmount; i++) 
    { 
     temp = ptr[0]; 
     for(j=0;j < SlotNumber - 1;j++) 
     { 
      ptr[j] = ptr[j+1]; 
     } 
     ptr[SlotNumber - 1]=temp; 
    } 

    printf("\nNewList\n"); 
    for(i=0; i < SlotNumber; i++) 
    { 
     printf("%d \t",ptr[i]); 
    } 

    free(ptr); 

    return 0; 
} 
+0

Спасибо. Я добавил оператор печати, чтобы задать пользователю направление сдвига, и я смог заставить его сдвинуться вправо. – EGTech

+0

@EGTech приятно слышать, что –

Смежные вопросы