Website Summary Files Commits Branches @commit @diff @stats
path: root / Sem. 04_KN / tasks.cpp
blob: 1b073bf7a0b57d24ba3d91f3c7fa1de568d69d7e (plain) (blame)
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
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229

#include <iostream>
using namespace std;

/*
<параметри> = <тип> <име>
<тип на връщане> <идентификатор> (<параметри>)
{
 // тяло на функцията/
 
 //return - какво връща функцията в този случай.
}

*/


//задача 1:
// Въвежда се цяло число n. 
// Да се отпечатат всички двойки прости числа, които са 
// във вида 6k-1 и 6k+1 и са по по-малки от n.

// n = 50
// 5 7
// 11 13
// 17 19
// 41 43

bool isPrime(int n)
{
	double temp = sqrt(n);

	if (n < 2)
		return false;

	for (int i = 2; i <= temp; i++)
	{
		if (n % i == 0)
			return false;
	}
	return true;
}



//задача 2:
// Напишете функция, която приема число и връща обърнатото.
// Вход: 1234  Изход: 4321

int reverse(int n)
{
	int result = 0;
	while (n != 0)
	{
		int lastDigit = n % 10;
		(result *= 10) += lastDigit; // result = (result = result * 10) + lastDigit
		n /= 10;
	}
	return result;
}

//задача 3:
// Напишете функция, която приема число и връща дали е палиндром.
// Вход: 121  Изход: true
// Вход: 1213  Изход: false
bool isPalindrome(int n)
{
	return reverse(n) == n;
}

//задача 4: Напишете функция, която приема две цели числа - n и k.
// и връща дали k е суфикс на n.

// n = 1234
// k =   34  true

// n = 1234
// k =  23  false

bool isSuffix(unsigned n, unsigned k)
{
	if (n < k)
		return false;

	while (k != 0)
	{
		int nLastDigit = n % 10;
		int kLastDigit = k % 10;

		if (nLastDigit != kLastDigit)
			return false;

		n /= 10;
		k /= 10;
	}

	return true;
}
//  w is pref u  <-> w^rev is suff u^rev
 
//задача 5: Напишете функция, която приема две цели числа (n, k) 
//и връща дали k е префикс на n.
bool isPrefix(unsigned n, unsigned k)
{
	return isSuffix(reverse(n), reverse(k));
}

//задача 6: Напишете функция, която приема две цели числа (n,k)
// и връща дали k е инфикс на n.
bool isInfix(unsigned n, unsigned k)
{
	while (n > k)
	{
		if (isSuffix(n, k))
			return true;
		n /= 10;
	}
	return false;
}

// задача 7: Напишете функция, която приема цяло число и връща
// дали цифрите му са сортирани.

// -> възходящо
// -> низходящо
bool areDigitsSortedIncreasing(unsigned n)
{
	cout << "areDigitsSortedIncreasing" << endl;
	while (n >= 10)
	{
		int lastDigit = n % 10;
		int prevLastDigit = (n / 10) % 10;

		if (prevLastDigit > lastDigit)
			return false;

		n /= 10;
	}
	return true;
}

bool areDigitsSortedDecreasing(unsigned n)
{
	cout << "areDigitsSortedDecreasing" << endl;
	return areDigitsSortedIncreasing(reverse(n));
}

bool areDigitsSorted(int n)
{
	return areDigitsSortedIncreasing(n) || areDigitsSortedDecreasing(n);
}

//задача 8: Въвежда се цяло число. Отпечатайте дали се състои от еднакви цифри
// 111111 - труе
// 123432 - фалсе

bool areDigitsTheSame(int n)
{
	return areDigitsSortedIncreasing(n) && areDigitsSortedDecreasing(n);
}

void print(int n)
{
	cout << n << endl;

	return; //функцията да приключи 

	//code - кодът е недостижим
}

int main()
{
	int n;
	cin >> n;


	//task1
	// GOOD

	//for (int i = 6; i < n; i += 6)
	//{
	//	if (isPrime(i - 1) && isPrime(i + 1))
	//		cout << i - 1 << " " << i + 1 << endl;
	//}




	//task1
	//BAD


	//for (int i = 6; i < n; i += 6)
	//{
	//	int firstToCheck = i - 1;
	//	int secondToCheck = i + 1;

	//	//primality check for the first

	//	bool isFirstPrime = true;
	//	double sqrtFirst = sqrt(firstToCheck);
	//	for (int j = 2; j <= sqrtFirst; j++)
	//	{
	//		if (firstToCheck % j == 0)
	//		{
	//			isFirstPrime = false;
	//			break;
	//		}
	//	}
	//	if (!isFirstPrime)
	//		continue;


	//	//primality check for the second 

	//	bool isSecondPrime = true;
	//	double sqrtSecond = sqrt(secondToCheck);
	//	for (int j = 2; j <= sqrtSecond; j++)
	//	{
	//		if (secondToCheck % j == 0)
	//		{
	//			isSecondPrime = false;
	//			break;
	//		}
	//	}

	//	if (isSecondPrime)
	//		cout << firstToCheck << " " << secondToCheck << endl;
	//}
}