Задача: В массиве [latex]Z(2n)[/latex] каждый элемент с чётным индексом поменять местами с предыдущим, то есть получить последовательность чисел [latex]z_{2}[/latex], [latex]z_{1}[/latex], [latex]z_{4}[/latex], [latex]z_{3}[/latex], \ldots ,[latex]z_{2n}[/latex], [latex]z_{2n-1}[/latex].
Тесты:
[latex]n[/latex] | Входной массив | Обработанный массив |
5 | 1 2 3 4 5 6 7 8 9 10 | 2 1 4 3 6 5 8 7 10 9 |
7 | 2 4 6 8 10 12 14 16 18 20 22 24 26 28 | 4 2 8 6 12 10 16 14 20 18 24 22 28 26 |
Код на С++:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
#include <iostream> #include <stdio.h> using namespace std; int main () { int n; cin>>n; //задаём размерность массива n*=2; int A[n+1]; //VLA for (int i=1; i<=n; i++) { //присваиваем каждому элементу массива свой порядковый номер (для удобства проверки работы алгоритма) cin>>A[i]; cout<<A[i]<<' '; } for (int i=2; i<=n; i++) { if (i%2==0) { //если номер элемента чётный, int tmp = A[i]; //то меняем местами чётный и нечётный элементы A[i]=A[i-1]; A[i-1] = tmp; } } for (int i=1; i<=n; i++) { //вывод изменённого массива cout<<A[i]<<' '; } return 0; } |
Код на Java:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
import java.util.*; import java.lang.*; import java.io.*; class Nums { public static void numSwap (int[] A, int a, int b) { int tmp = A[a]; A[a] = A[b]; A[b]= tmp; } public static void main (String[] args) { Scanner sc = new Scanner (System.in); int n; n = sc.nextInt(); int[] A; A = new int [2*n]; for (int i=0; i<2*n; i++) A[i] = sc.nextInt(); for (int i=1; i<2*n; i+=2){ numSwap (A, i-1, i); } for (int i=0; i<2*n; i++) System.out.print (A[i] + " "); System.out.print ("\n"); } } |
Решение: Для того, чтобы поменять местами чётный и нечётный по порядковому номеру элементы массива, надо определить чётность порядкового номера. Для этого надо проверить остаток от деления на 2, т.е если [latex]imod2=0[/latex], то меняем предыдущий элемент с текущим.
Для проверки правильности работы программы, воспользуйтесь ссылкой.