Программное решение задач ЕГЭ по информатике

Задача 6533. Источник: Поляков. Задание КИМ 5

Страница задачи 6533

На вход алгоритма подаётся натуральное число N. Алгоритм строит по нему новое число R следующим образом:

  1. Строится двоичная запись числа N.
  2. Если число N делится на 7, в конец двоичной записи дописывается двоичный код числа 7, иначе дописывается единица.
  3. Если число, полученное после шага 2, делится на 5, в конец двоичной записи дописывается двоичный код числа 5, иначе дописывается единица.
  4. Полученная таким образом запись является двоичной записью искомого числа R.

Например, для исходного числа 1410 = 11102 (делится на 7) после шага 2 получается число 11101112 = 11910 (не делится на 5), а после шага 3 – число 111011112 = 23910. Определите наименьшее возможное значение N, для которого в результате работы алгоритма получается R > 500000.

Решение

Задача одинаково легко решается, как через эквивалентные целочисленные операции, так и через операции со строками.

Python через строки

  1. for n in range(1, 100000):
  2. s = bin(n)[2:]
  3. if n % 7 == 0:
  4. s += '111'
  5. else:
  6. s += '1'
  7. if int(s, 2) % 5 == 0:
  8. s += '101'
  9. else:
  10. s += '1'
  11. if int(s, 2) > 500000:
  12. print(n)
  13. break

Python через целочисленные операции

  1. for n in range(1, 100000):
  2. r = n
  3. if r % 7 == 0:
  4. r = r * 8 + 7
  5. else:
  6. r = r * 2 + 1
  7. if r % 5 == 0:
  8. r = r * 8 + 5
  9. else:
  10. r = r * 2 + 1
  11. if r > 500000:
  12. print(n)
  13. break;

PascalABC через строки

  1. function Bin(n: Integer): String;
  2. begin
  3. result := '';
  4. while n > 0 do
  5. begin
  6. result := IntToStr((n mod 2)) + result;
  7. n := n div 2;
  8. end;
  9. if result = '' then
  10. result := '0';
  11. end;
  12. function Int(s: String; r: Integer := 10): Integer;
  13. var
  14. n, i: Integer;
  15. begin
  16. result := 0;
  17. n := 1;
  18. for i := s.Length downto 1 do
  19. begin
  20. result := result + StrToInt(s[i]) * n;
  21. n := n * r;
  22. end;
  23. end;
  24. var
  25. n: Integer;
  26. s: String;
  27. begin
  28. for n := 1 to 99999 do
  29. begin
  30. s := Bin(n);
  31. if n mod 7 = 0 then
  32. s := s + '111'
  33. else
  34. s := s + '1';
  35. if Int(s, 2) mod 5 = 0 then
  36. s := s + '101'
  37. else
  38. s := s + '1';
  39. if Int(s, 2) > 500000 then
  40. begin
  41. Writeln(n);
  42. break;
  43. end;
  44. end;
  45. end.

PascalABC через целочисленные операции

  1. var
  2. n, r: Integer;
  3. begin
  4. for n := 1 to 99999 do
  5. begin
  6. r := n;
  7. if r mod 7 = 0 then
  8. r := r * 8 + 7
  9. else
  10. r := r * 2 + 1;
  11. if r mod 5 = 0 then
  12. r := r * 8 + 5
  13. else
  14. r := r * 2 + 1;
  15. if r > 500000 then
  16. begin
  17. Writeln(n);
  18. break;
  19. end;
  20. end;
  21. end.

C++ через строки

  1. #include <iostream>
  2. #include <string>
  3. using namespace std;
  4. string bin(int n)
  5. {
  6. string s = "";
  7. while (n > 0)
  8. {
  9. s = to_string(n % 2) + s;
  10. n /= 2;
  11. }
  12. if (s == "")
  13. s = "0";
  14. return s;
  15. }
  16. int to_int(string s, int r)
  17. {
  18. int n = 0, z = 1;
  19. for (int i = s.length() - 1; i >= 0; i--)
  20. {
  21. n += ((int)s[i] - 48) * z;
  22. z *= r;
  23. }
  24. return n;
  25. }
  26. int main()
  27. {
  28. for (int n = 1; n < 100000; n++)
  29. {
  30. string s = bin(n);
  31. if (n % 7 == 0)
  32. s += "111";
  33. else
  34. s += "1";
  35. if (to_int(s, 2) % 5 == 0)
  36. s += "101";
  37. else
  38. s += "1";
  39. if (to_int(s, 2) > 500000)
  40. {
  41. cout << n << endl;
  42. break;
  43. }
  44. }
  45. }

C++ через целочисленные операции

  1. #include <iostream>
  2. using namespace std;
  3. int main()
  4. {
  5. for (int n = 1; n < 100000; n++)
  6. {
  7. int r = n;
  8. if (r % 7 == 0)
  9. r = r * 8 + 7;
  10. else
  11. r = r * 2 + 1;
  12. if (r % 5 == 0)
  13. r = r * 8 + 5;
  14. else
  15. r = r * 2 + 1;
  16. if (r > 500000)
  17. {
  18. cout << n << endl;
  19. break;
  20. }
  21. }
  22. }

Ответ

7826

Отправить замечание по решению

Код по которому имеется замечание:

Ваш вариант кода:

Комментарий: