За последние 24 часа нас посетили 22734 программиста и 1258 роботов. Сейчас ищут 757 программистов ...

Подскажите! Есть ли какие-то иные способы решения этой задачи?

Тема в разделе "PHP для новичков", создана пользователем Jovani, 4 июл 2018.

Метки:
  1. Jovani

    Jovani Новичок

    С нами с:
    4 июл 2018
    Сообщения:
    3
    Симпатии:
    0
    Найдите все счастливые билеты. Счастливый билет - это билет, в котором сумма первых трех цифр его номера равна сумме вторых трех цифр его номера.
    Вот моё решение:
    PHP:
    1. function lucky($num)
    2.     {
    3.         $arr = str_split($num, 3);
    4.         $arr[0] = str_split($arr[0], 1);
    5.         $arr[1] = str_split($arr[1], 1);
    6.         if (array_sum($arr[0]) == array_sum($arr[1])) {
    7.             return $num;
    8.         }
    9.     }
    10.     function generationNew()
    11.     {
    12.         $num = 0;
    13.         $result = [];
    14.         for ($i=1; $i <= 999999; $i++) {
    15.             $num += 1;
    16.             switch (strlen($num)) {
    17.                 case '1':
    18.                     $result[] = '00000'.$num;
    19.                     break;
    20.                 case '2':
    21.                     $result[] = '0000'.$num;
    22.                     break;
    23.                 case '3':
    24.                     $result[] = '000'.$num;
    25.                     break;
    26.                 case '4':
    27.                     $result[] = '00'.$num;
    28.                     break;
    29.                 case '5':
    30.                     $result[] = '0'.$num;
    31.                     break;
    32.                 default:
    33.                     $result[] = $num;
    34.                     break;
    35.             }
    36.         }
    37.         return $result;
    38.     }
    39.     function test($arr)
    40.     {
    41.         $result = [];
    42.         for ($i=0; $i < count($arr); $i++) {
    43.             if (!empty(lucky($arr[$i]))) {
    44.                 $result[] = lucky($arr[$i]);
    45.             }
    46.         }
    47.         return $result;
    48.     }
    49.     var_dump(test(generationNew()));
     
  2. Taktreba

    Taktreba Активный пользователь

    С нами с:
    11 янв 2017
    Сообщения:
    543
    Симпатии:
    132
    а счастливый билет нужно искать в диапазоне 000000 до 999999?
     
  3. laszlopv

    laszlopv Активный пользователь

    С нами с:
    26 фев 2017
    Сообщения:
    244
    Симпатии:
    40
  4. Jovani

    Jovani Новичок

    С нами с:
    4 июл 2018
    Сообщения:
    3
    Симпатии:
    0
    "первых трех цифр его номера равна сумме вторых трех" - 6-ть символов. Выходит, что диапазон для низ - 000001 до 999999
     
  5. Sail

    Sail Старожил

    С нами с:
    1 ноя 2016
    Сообщения:
    1.591
    Симпатии:
    360
  6. Afflictio

    Afflictio Новичок

    С нами с:
    17 апр 2019
    Сообщения:
    2
    Симпатии:
    0
    PHP:
    1. $num = 999999;  
    2.  
    3.     function happy($num){
    4.  
    5.     $count=0;
    6.  
    7.     for($i=1;$i<=$num;$i++){
    8.    
    9.     $str =(string)$i;
    10.     if(strlen($str)<6){
    11.     for($j=strlen($str);$j<6;$j++){  
    12.     $str='0'.$str;  
    13.     }
    14.     }
    15. $arr = $str;
    16. If($arr[0]+$arr[1]+$arr[2] == $arr[3]+$arr[4]+$arr[5]){
    17.        
    18. $count++; echo 'Билет номер: '.$str.'<br>'; }
    19.  }
    20.  
    21. echo 'Количество счсатливых билетов :'.$count;
    22.    
    23. }
    24.     echo happy($num);
    Вот что родил я
     
    #6 Afflictio, 17 апр 2019
    Последнее редактирование: 17 апр 2019
  7. Boothooz

    Boothooz Активный пользователь

    С нами с:
    8 май 2016
    Сообщения:
    63
    Симпатии:
    6
    можно еще проще )
     
  8. Afflictio

    Afflictio Новичок

    С нами с:
    17 апр 2019
    Сообщения:
    2
    Симпатии:
    0
    ну я только 4 дня занимаюсь)
     
  9. Fibonachi

    Fibonachi Новичок

    С нами с:
    21 апр 2019
    Сообщения:
    5
    Симпатии:
    0
    Приятно, когда ответ на твой вопрос приходит, пусть и через 9 месяцев ;) Но раз мы взялись оптимизировать, мой вариант:
    PHP:
    1. function happy(){
    2.     $count= 0;
    3.     for($i=1;$i<=999999;$i++){
    4.         $str = (string)$i;
    5.         if(strlen($str)<6){
    6.             for($j=strlen($str);$j<6;$j++){
    7.                 $str='0'.$str;
    8.             }
    9.         }
    10.         If($str[0]+$str[1]+$str[2] == $str[3]+$str[4]+$str[5]){  
    11.             $count++; echo 'Билет номер: '.$str.'<br>';
    12.         }
    13.     }
    14. echo 'Количество счастливых билетов: '.$count;
    15. }
    16. echo happy();
     
  10. sobachnik

    sobachnik Старожил

    С нами с:
    20 апр 2007
    Сообщения:
    3.380
    Симпатии:
    13
    Адрес:
    Дмитров, МО
    Извращенцы!:D
    https://www.php.net/manual/ru/function.str-pad.php
     
  11. Boothooz

    Boothooz Активный пользователь

    С нами с:
    8 май 2016
    Сообщения:
    63
    Симпатии:
    6
    еще проще ))