Задания
Версия для печати и копирования в MS Word
Тип 16 № 63065
i

Обо­зна­чим через a%b оста­ток от де­ле­ния на­ту­раль­но­го числа a на на­ту­раль­ное число b, а через a//b  — целую часть от де­ле­ния a на b.

Функ­ция F(n), где n  — не­от­ри­ца­тель­ное целое число, за­да­на сле­ду­ю­щи­ми со­от­но­ше­ни­я­ми:

F(n)  =  0, если n  =  0;

F(n)  =  F(n//10) + n%10, если n > 0 и n чётно;

F(n)  =  F(n//10), если n нечётно.

Опре­де­ли­те ко­ли­че­ство таких целых k, что 109 ≤ k ≤ 2 · 109 и F(k)  =  2.

Спрятать решение

Ре­ше­ние.

Для при­ме­ра най­дем зна­че­ние F(12345):

F левая круг­лая скоб­ка 12345 пра­вая круг­лая скоб­ка = F левая круг­лая скоб­ка 1234 пра­вая круг­лая скоб­ка = F левая круг­лая скоб­ка 123 пра­вая круг­лая скоб­ка плюс 4 = F левая круг­лая скоб­ка 12 пра­вая круг­лая скоб­ка плюс 4 = F левая круг­лая скоб­ка 1 пра­вая круг­лая скоб­ка плюс 2 плюс 4 = F левая круг­лая скоб­ка 0 пра­вая круг­лая скоб­ка плюс 2 плюс 4 = 6.

То есть ал­го­ритм счи­та­ет сумму всех чет­ных цифр в числе. По­сколь­ку по усло­вию за­да­чи тре­бу­ет­ся найти числа, сумма чет­ных цифр ко­то­рых равна 2, то число может со­сто­ять толь­ко из не­чет­ных цифр, нуля и одной двой­ки. До­ста­точ­но по­счи­тать все воз­мож­ные ва­ри­ан­ты. На пер­вом месте может сто­ять 1, далее одна двой­ка на любом месте и цифры из на­бо­ра 0 (так как 0 в сумме не уве­ли­чи­ва­ет число), 1, 3, 5, 7, 9 (всего 6). По­счи­та­ем ко­ли­че­ство чисел из диа­па­зо­на 109 ≤ k ≤ 2 · 109−1, удо­вле­тво­ря­ю­щих усло­вию:

1 умно­жить на 9 умно­жить на 6 умно­жить на 6 умно­жить на 6 умно­жить на 6 умно­жить на 6 умно­жить на 6 умно­жить на 6 умно­жить на 6 = 15 116 544.

Также под­хо­дит число 2 · 109, так как со­дер­жит одну двой­ку. Всего под­хо­дя­щих чисел:

15 116 544 плюс 1 = 15 116 545.

Ответ: 15 116 545.

 

При­ведём ре­ше­ние Артёма Гри­ди­на на языке C#.

using System;

namespace N63065

{

    internal class Program

    {

        static int F(int n)

        {

            if (n== 0)

                return 0;

            else if (n % 2 == 0)

                return F(n / 10) + n % 10;

            else

                return F(n / 10);

        }

        static void Main()

        {

            var p = Convert.ToInt32(Math.Pow(10, 9));

            var cnt = 0;

            for (int k = p; k<=2*p; k++)

            {

                if (F(k) == 2)

                    cnt++;

            }

            Console.WriteLine(cnt);

            Console.ReadKey();

        }

    }

}


Аналоги к заданию № 63032: 63065 Все