-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathtask_7_ver2_.php
More file actions
92 lines (68 loc) · 2.94 KB
/
Copy pathtask_7_ver2_.php
File metadata and controls
92 lines (68 loc) · 2.94 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
<?php
/*
* Задача на логику “Счастливые билеты”
Предположим, что номер билета состоит из 6 цифр. Билет считается
счастливым, если сумма первых трех цифр равняется сумме вторых трех цифр.
Написать функцию luckyTickets($k), которая посчитает и вернет возможное количество таких билетов, где $k — число цифр в билете (четное, 2,4,6...). Билет 000000 считается.
Примеры счастливых билетов: 933591, 030300, 113311.
Обратите внимание: количество цифр в пропуске может быть как больше, так и
меньше 6. Гарантируемое условие - количество цифр четное.
*/
$start = microtime(true);
//8 цифр 101 секунда
$k = 6;
function luckyTicket($k)
{
global $max;
$max = null;
global $min;
$min = null;
$count=1; //нулевой всегда выиграшный
//проверка на чётное число
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++) {
$len=strlen($bilet);
//проверка длины билета
if (strlen($len) < $k) {
//добавляем нули в начало билета
$bilet = str_pad($bilet, $k, "0", STR_PAD_LEFT);
// print($b." ");
}
//цикл расчёта сумм половинок
$sum1 = null;
$sum2 = null;
for ($t = 1; $t <= $polov; $t++) {
//для первой половины
$t1 = (substr($bilet, $t - 1, 1));
$sum1 = $sum1 + $t1;
//для второй половины
$t2 = (substr($bilet, $k - $t, 1));
$sum2 = $sum2 + $t2;
}
//считаем выиграшные
if ($sum1 == $sum2) {
$count++;
/* print ($bilet . " выиграшный\t");
print ($sum1 . "=");
print ($sum2 . "");
print ("\tитого " . $count . "\n");*/
}
}
print ("Количество выиграшных билетов:\t$count \n");
}
}
luckyTicket($k);
print "Время выполнения скрипта c $k цифрами в билете: ".round(microtime(true) - $start, 4)." сек.\n";