БлогNot. Добрые числа

Добрые числа

Не всё же числам злыми быть, должны быть и добрые :)

Число является добрым, если каждая цифра числа больше чем сумма цифр, стоящих справа от неё. Например, 4210 - доброе число, потому что 4 > 2+1, 2 > 1+0 и 1 > 0.

Числа из 1 цифры и 10, 20, ..., 90 добры по определению (100 - уже нет), остальные добрые числа тоже могут состоять из разных цифр, как, впрочем, и злые. Только их окажется меньше, чем злых, хотите, посчитайте насколько.

Такой простой алгоритм, как для злых чисел, для добрых что-то не вырисовывается, придётся просто перебрать.

Впрочем, добро вообще неизмеримо сложнее зла. Оттого и более уязвимо, и реже встречается.

Вот добрые числа от 0 до 2018 включительно, дальше, наверное, закономерность угадывается :)

0 1 2 3 4 5 6 7 8 9 
10 
20 21 
30 31 32 
40 41 42 43 
50 51 52 53 54 
60 61 62 63 64 65 
70 71 72 73 74 75 76 
80 81 82 83 84 85 86 87 
90 91 92 93 94 95 96 97 98 
210 
310 320 
410 420 421 430 
510 520 521 530 531 540 
610 620 621 630 631 632 640 641 650 
710 720 721 730 731 732 740 741 742 750 751 760 
810 820 821 830 831 832 840 841 842 843 850 851 852 860 861 870 
910 920 921 930 931 932 940 941 942 943 950 951 952 953 960 961 962 970 971 980

И программка:

#include <iostream>
using namespace std;

bool isGoodNumber(int n) {
 int digit = n % 10;
 int sum = digit;
 n /= 10;
 while (n) {
  digit = n % 10;
  if (digit <= sum) return false;
  else {
   sum += digit;
   n /= 10;
  }
 }
 return true;
}

void printGoodNumbers (int low, int high) {
 for (int i = low; i <= high; i++) if (isGoodNumber(i)) cout << i << " ";
}

int main() {
 printGoodNumbers (0, 2018);
 cin.get();
 return 0;
}

Кстати:
Следующий "добрый" год наступит в 4210-м :)

25.04.2018, 12:45 [2868 просмотров]


теги: c++ числа

показать комментарии (2)