Нужно идти с заду наперёд. Если число нечётное - отнять 3, потом поделить на 2.
Например число 47 нечётное - отнять 3, потом разделить на 2, и так пока не будет 1. Чтобы получить 47 из 1 нужно записать команды получения из 47 1 в обратном порядке с обратными операциями.
Например число 11.
чтобы из 11 получить 1 нужно отнять 3. 11 - 3 = 8, разделить на 2, 8/2 = 4, отнять 3.
Чтобы из числа 1 получить 11 нужно записать команда получения из числа 11 1 в обратном порядке, заменив деление умножением, вычитание прибавлением: к 1 прибавить 3, умножить на 2, прибавить 3.
В программировании можно реализовать данный алгоритм с рекурсии, с стека, либо с массива.
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
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
#include "stdafx.h"
#include "stdio.h"
#include <time.h>
#include <stdlib.h>
class vector
{
private:
int* m;
int size;
public :
vector(int n = 0);
vector(const vector &vector2);
~vector();
};
vector::vector( int n )
{
if (n < 0) n = 0;
size = n;
m = new int[n];
if(!m)
printf("Error");
else
m = NULL;
}
vector::vector(const vector &vector2)
{
size = vector2.size;
m = new int [size];
for(int i = 0; i<size;i++)
m[i] = vector2.m[i];
printf("kopia stvorena !");
}
vector::~vector()
{
delete[] m;
}
vector(int *m, int size)
{
srand(time(NULL))
if(!m)
printf("error")
else
for(int i = 0; i < size; i++)
m[i] = rand()% 99;
}
int main()
{
vector v1(45),
system("pause");
return 0;
}
Объяснение:
Здесь k будет изменятся от 4 до 10(не включая 10) с шагом 2. k = 4, 6, 8
ответ: 3