Палиндромом назовем число, состоящее не менее чем из 2-х символов или цифр, одинаково...

0 голосов
47 просмотров

Палиндромом назовем число, состоящее не менее чем из 2-х символов или цифр, одинаково читающееся как слева направо, так и наоборот. Например, число «1221» является палиндромом, а число «1224» – нет. Назовем палиндромом-1016 число, являющееся палиндромом в десятичном и шестнадцатеричном представлении. Количество палиндромов-1016 среди первых десяти миллионов натуральных чисел составит…


Информатика (370 баллов) | 47 просмотров
0

n=0 for i in 16..10000000 dec = i.to_s(10) hex = i.to_s(16) if dec == dec.reverse and hex == hex.reverse n+=1 p [dec, hex] end end

0

["353", "161"] ["626", "272"] ["787", "313"] ["979", "3d3"] ["1991", "7c7"] ["3003", "bbb"] ["39593", "9aa9"] ["41514", "a22a"] ["90209", "16061"] ["94049", "16f61"] ["96369", "17871"] ["98689", "18181"] ["333333", "51615"] ["512215", "7d0d7"] ["666666", "a2c2a"] ["749947", "b717b"] ["845548", "ce6ec"] ["1612161", "189981"] ["2485842", "25ee52"] ["5614165", "55aa55"] ["6487846", "62ff26"] ["9616169", "92bb29"] 22

0

блин, кому-то руки надо поотрывать, код нельзя нормаьно вставить

0

программа написана на ruby22

0

Поэтому мне нужно учить Ruby, так как код выглядит гораздо проще))

0

в руби просто очень много встроенных прикольных функций, а плюсы язык спецефический хотя многофункциональный и оптимизированный под задачу

Дан 1 ответ
0 голосов

Ответ: 22
Вариант на C++, но программа долго выполняется; как оптимизировать, я пока не знаю.

#include
#include
#include
int main()
{
    int k = 0;    //счетчик 1016палиндромов
   
    for (int i = 16; i <= 10000000; i++)<br>    {
        int temp = i;

        std::stringstream ss;   //перевод 10чного числа в 16чную строку
        ss << std::hex << temp; <br>        std::string temp16(ss.str());

        //проверяем, является ли 16чное число палиндромом
        bool t16 = true;
        int left_index = 0;
        int right_index = temp16.size() - 1;
        while (left_index < right_index)
            if (temp16[left_index++] != temp16[right_index--])
                t16 = false;

        if (t16)
        {
            bool t10 = true;
            std::ostringstream ost;   //перевод 10чного числа в строку
            ost << temp;<br>            std::string temp10 = ost.str();

            //проверяем, является ли 10чное число палиндромом
            int left_index = 0;
            int right_index = temp10.size() - 1;
            while (left_index < right_index)
                if (temp10[left_index++] != temp10[right_index--])
                    t10 = false;

            if (t10)
                k = k + 1;
        }
    }
   
    std::cout << "Number of 1016-palindroms: " << k << std::endl;<br>    return 0;
}

(1.1k баллов)