Заданы n чисел. Выведите их в обратном порядке.
Вход. Сначала задано число n
(0 < n < 100), за ним идут n целых чисел.
Выход. Выведите
заданные n чисел в обратном порядке.
Пример
входа |
Пример
выхода |
7
2 4 1 3 5 3
1 |
1 3 5 3 1 4 2 |
массив
Занесем числа в линейный массив. Затем выведем их в обратном
порядке.
Рассмотрим решение задачи с переворотом массива. Для этого
воспользуемся техникой двух указателей.
Установим две переменнные i и j (назовем их указателями):
·
i на начало массива (i = 1);
·
j на конец массива (j = n);
Далее запустим while цикл, в котором:
·
значения m[i] и m[j] меняются местами;
·
после чего i увеличивается на 1, а j уменьшается на 1;
Цикл продолжаем, пока указатели i и j не встретятся.
Отметим, что поменять значения m[i] и m[j] можно при
помощи дополнительной переменной temp, выполнив три операции:
Читаем входные
данные.
scanf("%d",&n);
for(i = 0; i < n; i++)
scanf("%d",&mas[i]);
Выводим числа в обратном порядке.
for(i = n - 1; i >= 0; i--)
printf("%d
",mas[i]);
printf("\n");
Реализация – с переворотом массива
Объявим массив.
#define MAX 110
int m[MAX];
Читаем входные данные.
scanf("%d",&n);
for(i = 1; i <= n; i++)
scanf("%d",&m[i]);
При помощи техники двух указателей переворачиваем массив.
i = 1; j = n;
while(i < j)
{
temp = m[i]; m[i] = m[j]; m[j] = temp;
i++; j--;
}
Выводим результирующий массив.
for(i = 1; i <= n; i++)
printf("%d
",m[i]);
printf("\n");
Реализация – динамический массив
#include <stdio.h>
int n, i;
int *mas;
int main(void)
{
scanf("%d",&n);
mas = new int[n];
for(i = 0; i
< n; i++)
scanf("%d",mas+i);
int *p = mas,
*q = mas + n - 1;
while(p <
q)
{
int temp = *p; *p = *q; *q = temp;
p++; q--;
}
for(i = 0; i
< n; i++)
printf("%d
",mas[i]);
printf("\n");
delete[] mas;
return 0;
}
Реализация – вектор
#include <cstdio>
#include <vector>
using namespace
std;
int n, i;
vector<int> mas;
int main(void)
{
scanf("%d",&n);
mas.assign(n,0);
for(i = 0; i
< n; i++)
scanf("%d",&mas[i]);
for(i = n -
1; i >= 0; i--)
printf("%d
",mas[i]);
printf("\n");
return 0;
}
Реализация – STL reverse
#include <cstdio>
#include <vector>
#include <algorithm>
using namespace
std;
int n, i;
vector<int> mas;
int main(void)
{
scanf("%d",&n);
mas.resize(n);
for(i = 0; i
< n; i++)
scanf("%d",&mas[i]);
reverse(mas.begin(),mas.end());
for(i = 0; i
< n; i++)
printf("%d
",mas[i]);
printf("\n");
return 0;
}
Реализация – STL stack
#include <cstdio>
#include <stack>
using namespace
std;
int n, i, val;
stack<int> s;
int main(void)
{
scanf("%d",&n);
for(i = 0; i
< n; i++)
{
scanf("%d",&val);
s.push(val);
}
while(!s.empty())
{
printf("%d
",s.top());
s.pop();
}
printf("\n");
return 0;
}
Java реализация – вывод массива
справа налево
import java.util.*;
public class Main
{
public static void
main(String[] args)
{
Scanner con = new
Scanner(System.in);
int n = con.nextInt();
int mas[] = new int[n];
for(int i = 0;
i < n; i++)
mas[i] = con.nextInt();
for(int i = n - 1;
i >= 0; i--)
System.out.print(mas[i] + "
");
System.out.println();
con.close();
}
}
Java реализация – reverse
import java.util.*;
public class Main
{
public static void
main(String[] args)
{
Scanner con = new
Scanner(System.in);
int n = con.nextInt();
int m[] = new int[n];
// Read data
for(int i = 0;
i < n; i++)
m[i] = con.nextInt();
// Reverse an
array
int i = 0,
j = n - 1;
while(i <
j)
{
int temp = m[i]; m[i] = m[j]; m[j] = temp;
i++; j--;
}
// Print the
reversed array
for(i = 0;
i < n; i++)
System.out.print(m[i] + "
");
System.out.println();
con.close();
}
}
Java реализация – реверс массива
функцией
import java.util.*;
public class Main
{
public static int[]
reverse(int[] m)
{
int[] res = new int[m.length];
int i = 0,
j = m.length - 1;
while(i <
m.length)
{
res[i] = m[j];
i++; j--;
}
return res;
}
public static void
main(String[] args)
{
Scanner con = new
Scanner(System.in);
int n = con.nextInt();
int m[] = new int[n];
// Read data
for(int i = 0;
i < n; i++)
m[i] = con.nextInt();
// Reverse an
array
m = reverse(m);
// Print the
reversed array
for(int i = 0;
i < n; i++)
System.out.print(m[i] + "
");
System.out.println();
con.close();
}
}
Java реализация – ArrayList – вывод справа налево
import java.util.*;
public class Main
{
public static void
main(String[] args)
{
Scanner con = new
Scanner(System.in);
int n = con.nextInt();
ArrayList<Integer> mas = new
ArrayList<Integer>();
for(int i = 0;
i < n; i++)
mas.add(con.nextInt());
for(int i = n - 1;
i >= 0; i--)
System.out.print(mas.get(i) + "
");
System.out.println();
con.close();
}
}
Java реализация – class, reverse
import java.util.*;
class Array
{
ArrayList<Integer> m;
Array()
{
m = new
ArrayList<Integer>();
}
public void add(int n)
{
m.add(n);
}
public void
Reverse()
{
int i = 0,
j = m.size() - 1;
while(i <
j)
{
Collections.swap(m,i,j);
i++; j--;
}
}
public void
Print()
{
for(int i = 0;
i < m.size(); i++)
System.out.print(m.get(i) + "
");
System.out.println();
}
};
public class Main
{
public static void
main(String[] args)
{
Scanner con = new
Scanner(System.in);
int n = con.nextInt();
Array a = new
Array();
// Read data
for(int i = 0;
i < n; i++)
a.add(con.nextInt());
// Reverse an
array
a.Reverse();
// Print the
reversed array
a.Print();
con.close();
}
}
Python реализация
Читаем входные
данные.
n = int(input())
lst = list(map(int, input().split()))
Выводим числа в обратном порядке.
for i in range(n - 1,-1,-1):
print(lst[i], end = " ")
Python реализация – reverse
Читаем входные
данные.
n = int(input())
lst = list(map(int, input().split()))
Переворачиваем
список lst при
помощи функции reverse.
lst.reverse()
Выводим перевернутый список.
print(*lst)