function DifNum(a: integer): integer; var se: set of integer; i: integer; begin while a > 0 do begin if a mod 10 in se then begin DifNum := 0; exit; end else include(se, a mod 10); a := a div 10; end; DifNum := 1; end;
begin read(l, r); for i := l to r do counter += DifNum(i); writeln(counter); end.
//Альтернативное решение на Паскале
Var l,r:integer; begin read(l,r); writeln(range(l,r).where(x -> x.tostring.toarray.distinct.count=length(x.tostring)).Count); end.
Начнем с того, что мах десятичное 4-хзначное число это 9999. мах сумма будет 9*4=36 мах произ-ие 9*9*9*9=6561 невозрастание это убывание или равенство
Число 63 разделим его на 2 числа, т.к. вычисляются 2 числа. Получаем 6 и 3. 6 и 3 - убывание 1) Предположим, что 6-произведение, а 3-сумма, тогда 6=2*3*1*1 (4 числа, т.к. по условию у нас 4-хзначное число), но тогда 3=2+3+1+1. Значит неправильное предположение. 2) 3-произведение, а 6-сумма, тогда 3=3*1*1*1, а 6=3+1+1+1. Все сходится. Вывод: число 63 нам подходит.
Число 89. числа 8 и 9. возрастание. Вывод: не подходит
Число 98 9 и 8. убывание 1) Начнем с того, что 9-произведение, а 8- сумма 9=3*3*1*1, 8=3+3+1+1 Вывод: подходит
Число 200. 20 и 0. И никак иначе. Т.к. чисел 2 и 00 быть не может. убывание 1) 0-логично, что это пр-ие, т.к. суммой быть не может, значит 20-сумма 20=9+9+2+0 Вывод: подходит
Число 291. числа 29 и 1, т.к. только так у нас будет убывание. 1) 1 суммой быть не может. 29-сумма, однако если 1-пр-ие, то только 1=1*1*1*1, но 29≠1+1+1+1 Вывод: не подходит
Число 1311 только 13 и 11 ни 13 ни 11 не могут быть пр-ием, т.к. умножаться и складываться могут только числа от 0 до 9 Вывод: не подходит
Число 656136. Видно, что мы можем поделить его на 6561 и 36. убывание. Оба числа-максимумы, значит Вывод: подходят
Число 756423. Одно из чисел не может быть больше 36, а также порядок невозрастания должен соблюдаться. Значит 7564 и 23. Одно из чисел все равно не входит в мах, значит Вывод: не подходит
var
l, r, counter, i: integer;
function DifNum(a: integer): integer;
var se: set of integer;
i: integer;
begin
while a > 0 do
begin
if a mod 10 in se then
begin
DifNum := 0;
exit;
end
else include(se, a mod 10);
a := a div 10;
end;
DifNum := 1;
end;
begin
read(l, r);
for i := l to r do
counter += DifNum(i);
writeln(counter);
end.
//Альтернативное решение на Паскале
Var
l,r:integer;
begin
read(l,r);
writeln(range(l,r).where(x -> x.tostring.toarray.distinct.count=length(x.tostring)).Count);
end.
//Dev-C++ 5.11 (C)
#include <stdio.h>
#include <malloc.h>
int DifNum(int);
int main(void)
{int l,r,counter=0;
scanf("%d %d",&l,&r);
for(int i=l;i<=r;i++)
counter+=DifNum(i);
printf("%d",counter);
return 0;}
int DifNum(int a)
{int k=1,*nums;
nums=(int*)malloc(k*sizeof(int));
nums[0]=-1;
while(a>0)
{for(int i=0;i<k;i++)
if(a%10==nums[i])
return 0;
k++;
nums=(int*)malloc(k*sizeof(int));
nums[k-1]=a%10;
a/=10;}
free(nums);
return 1;}
Пример ввода:
1 12
Пример вывода:
11