@KUKI_CHAR

Как перевернуть рандомный массив в СИ?

использовал два цикла, нужно сделать так, чтобы был только один.

#include<stdio.h>
int main() {
int a[10];
for(int i=0;i<10;i++){
a[i]=rand()%11;
printf("%d ", a[i]);}
int b[10];
int k=0;
for(int i=9;i>=0;i--){
b[k]=a[i];
k++;}
printf("\n\n");
for(int i=0;i<10;i++){
printf("%d ",b[i]);}
return 0;
}
  • Вопрос задан
  • 1425 просмотров
Пригласить эксперта
Ответы на вопрос 1
myjcom
@myjcom
Из того в чем вопрос и что написано непонятно что вы хотите.

если у вас 2 массива просто скопируйте один в другой в обратном порядке.

если у вас один массив то можно написать функцию reverse(first, last) и свопнуть элементы.

в обоих случаях один цикл.

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

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

void reverse(int* first, int* last)
{
    while((first != last) && (first != --last))
    {
        swap(first++, last);
    }
}

int* reverse_copy(int* first, int size)
{
    int* result = (int*)malloc(size * sizeof(int));
    for(int i = 0; i < size; ++i)
    {
        result[i] = first[size - i - 1];
    }
    return result;
}

int main()
{
    int a[] = {0,1,2,3,4,5,6,7,8,9};
    reverse(a, &a[10]);
    for(int i = 0; i < 10; ++i)
    {
        printf("%d ", a[i]);
    }

    printf("\n");

    int* b = reverse_copy(a, 10);

    for(int i = 0; i < 10; ++i)
    {
        printf("%d ", b[i]);
    }
    free(b);
}

OUT:
9 8 7 6 5 4 3 2 1 0
0 1 2 3 4 5 6 7 8 9

Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

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