За последние 24 часа нас посетили 128607 программистов и 6628 роботов. Сейчас ищут 1929 программистов ...

Найти красивые числа 100

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

  1. Vladimir789

    Vladimir789 Новичок

    С нами с:
    28 авг 2018
    Сообщения:
    4
    Симпатии:
    0
    Назовём красивыми числа, в записи которых есть минимум две одинаковые цифры (например: 44, 505, 1101, 2324).
    Сумма красивых чисел, меньших 100, равна 495 (11 + 22 + 33 + 44 + 55 + 66 + 77 + 88 + 99 = 495).


    Код (Text):
    1. <?php
    2.  
    3. /* Найти красивые числа до 100*/
    4.  
    5. $i = 0;
    6. $itog = 0;
    7.  
    8. // 100
    9.  
    10. do {    
    11.  
    12.     $i++;
    13.  
    14.     $x = $i[0];
    15.     $y = $i[1];
    16.  
    17.         if ($x == $y) {
    18.        
    19.             $itog = $itog + $i;
    20.         }
    21.  
    22.     } while ($i < 100);
    23.  
    24. echo "$itog";
    25.  
    26.  
    27. ?>
    ответ выдает - 5050 не правильный
     
    #1 Vladimir789, 28 авг 2018
    Последнее редактирование: 28 авг 2018
  2. Vladimir789

    Vladimir789 Новичок

    С нами с:
    28 авг 2018
    Сообщения:
    4
    Симпатии:
    0
    Здравствуйте, помогите начинающему.. может кто написать как правильней бы было сделать?
     
  3. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.333
    Симпатии:
    1.753
    что делает эта строка?
    $itog = $itog + $i;
     
  4. Vladimir789

    Vladimir789 Новичок

    С нами с:
    28 авг 2018
    Сообщения:
    4
    Симпатии:
    0
    если находятся две одинаковых цифры то они передаются в переменную $itog и каждый раз при нахождении таких цифр они суммируются чтобы у нас получилось число 495
     
  5. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.333
    Симпатии:
    1.753
    нет

    что делает это?
    $itog + $i

    и что делает это?
    $itog =
     
  6. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.497
    Симпатии:
    1.726
    А после расскажи, зачем ты с нуля перебираешь, если сразу ясно, что минимальное красивое число - 11. И почему do - while, а не for, который специально придуман для таких переборов?
     
  7. Valick

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

    С нами с:
    12 авг 2018
    Сообщения:
    1.907
    Симпатии:
    327
    а зачем тогда вообще их перебирать если их всех ясно?
    на счёт переборки с нуля тут всё правильно число 11 необходимо найти при помощи алгоритма, а не прописать руками
     
  8. Sail

    Sail Старожил

    С нами с:
    1 ноя 2016
    Сообщения:
    1.593
    Симпатии:
    362
    @Vladimir789, для начала надо сделать так, чтобы обращение к переменной как к массиву имело смысл. Например, "превратить" целое число $i в строку $j, которую дальше и обрабатывать.
    И перед использованием $j[1] - проверять его существование.
     
  9. Vladimir789

    Vladimir789 Новичок

    С нами с:
    28 авг 2018
    Сообщения:
    4
    Симпатии:
    0
    вот так сделал, подсказали на соседнем форуме

    Код (Text):
    1. // 100
    2.  
    3. $i = 0;
    4. $itog = 0;
    5.  
    6. do {  
    7.     $i++;
    8.     $i = strval($i);
    9.  
    10.     $x = $i[0];
    11.     $y = $i[1];
    12.         if ($x == $y) {
    13.      
    14.             $itog = $itog + $i;
    15.         }  
    16.     } while ($i < 100);
    17. echo "$itog  <br> <br>";
     
  10. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.497
    Симпатии:
    1.726
    В числе 1 у тебя не будет $i[1] даже после strval, а значит будет ошибка в лог идти. А перебирать до 11 вручную - да ну :) Даже если бы 100 задавалось пользовательским вводом, я бы сделал проверку, что если введено число < 11, сразу давать 0, а если больше - идти от 11. Кстати, твой алгоритм только на двухзначные цифры