-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathtask_7_array.php
More file actions
97 lines (72 loc) · 3.29 KB
/
Copy pathtask_7_array.php
File metadata and controls
97 lines (72 loc) · 3.29 KB
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
<?php
/*
* Задача на логику “Счастливые билеты”
Предположим, что номер билета состоит из 6 цифр. Билет считается
счастливым, если сумма первых трех цифр равняется сумме вторых трех цифр.
Написать функцию luckyTickets($k), которая посчитает и вернет возможное количество таких билетов, где $k — число цифр в билете (четное, 2,4,6...). Билет 000000 считается.
Примеры счастливых билетов: 933591, 030300, 113311.
Обратите внимание: количество цифр в пропуске может быть как больше, так и
меньше 6. Гарантируемое условие - количество цифр четное.
*/
$start = microtime(true);
//8 цифр 118 секунд
$k = 6;
function luckyTicket($k)
{
global $max;
$max = null;
global $min;
$min = null;
$count=1; //0 всегда выиграшный
//проверка на чётное число
if ($k % 2 != 0 || $k < 2 || gettype($k) != "integer") {
echo "некорректное значение! \n";
} else {
//определяем половину билета
$polov = $k / 2;
//максимальное значение в билете
for ($m = 1; $m <= $k; $m++) {
$max = $max . "9";
}
//от какого следует начинать...до него явно не выиграшные
for ($m = 1; $m < $k/2; $m++) {
$min = $min . "9";
}
//перебираем диапазон
for ($bilet = $min; $bilet <= $max; $bilet++) {
$array = str_split($bilet);
$array = array_reverse($array);
$cnt= count($array);
//проверка длины билета
if ($cnt <= $k ) {
//добавляем нули в начало билета
for ($c=$cnt; $c<$k; $c++) {
array_push($array, 0);
}
//цикл расчёта сумм половинок
$sum1 = null;
$sum2 = null;
for($t=1; $t<=$polov; $t++)
{
//для первой половины
$t1=$array[$t-1];
$sum1= $sum1+$t1;
//для второй половины
$t2=$array[$k-$t];
$sum2=$sum2+$t2;
}
//считаем выиграшные
if($sum1==$sum2){
$count++;
/* print (implode($array)." выиграшный\t"); ///билет зеркальный!!
print ($sum1."=");
print ($sum2."");
print ("\tитого ".$count."\n");*/
}
}
}
print ("Количество выиграшных билетов:\t$count \n");
}
}
luckyTicket($k);
print "Время выполнения скрипта c $k цифрами в билете: ".round(microtime(true) - $start, 4)." сек.\n";