Git Hub
коротко

Задание: Анаграмма

24 мая 2016, 12:24

Дано:

Число 128574 примечательно тем, что, будучи удвоенным, образует число 257148, которое состоит из тех же цифр, только в другом порядке.

Напишите программу, которая находит и выводит минимальное натуральное число, которое, будучи умноженным на 2, 3, 4, 5 и 6, образует числа, состоящие из тех же цифр, что и исходное.

Решение:

<?php

set_time_limit(0);


function dr($arg){
    echo '<pre>';
    echo var_dump($arg);
    echo '</pre>';
}

/**
 * Class Anagramm
 * класс поиска "анаграмм"
 */
class Anagramm {


    const MIN_LIMIT = 999;
    const MAX_LIMIT = 99999;

    /**
     * основной метод поиска анаграмм
     * @return возвращает наименьшую анаграмму из найденных
     */
    public static function search(){

        $arOperands = array(2,3,4,5,6);
        $arResult  = array();

        for ($in = self::MIN_LIMIT; $in <= self::MAX_LIMIT;$in++){

            foreach($arOperands as $operand)
            {
                $result = self::get($in,$operand);
                if (self::isCorrect($in,$result)){
                    $arResult[] = $in;

                }

            }
        }

         return min($arResult);
    }

    protected  static function  get($in,$operand){
        return ($in*$operand);
    }

    /**
     * метод проверки анаграммы на корректность
     * @param $in
     * @param $out
     * @return bool
     */
    protected  static function isCorrect($in, $out){

        $arIn = str_split($in);
        $arOut = str_split($out);

        sort($arIn);
        sort($arOut);

        $resultIn =  implode($arIn);
        $resultOut = implode($arOut);

        if (strcasecmp($resultIn,$resultOut)==0)
            return true;
        else
            return false;
    }

}



dr(Anagramm::search()); // выводим найденную анаграмму
Поделиться
Популярное