Отбор чисел по заданному условию
Модератор: Admin
Отбор чисел по заданному условию
Подскажите, какой оператор нужно использовать, чтобы из массива результатов отбирались и выводились на экран только числа, состоящие из одинаковых цифр?
-
- Сообщения: 1366
- Зарегистрирован: Вс дек 04, 2011 11:07 pm
Re: Отбор чисел по заданному условию
Условие выглядит надуманным, однако ради спортивного интереса сделал это:berg писал(а):Подскажите, какой оператор нужно использовать, чтобы из массива результатов отбирались и выводились на экран только числа, состоящие из одинаковых цифр?
A := Array([1.23, 3.33, 4.4]);
B := map(c -> convert(floor(c*10^(-op(2, frac(c)))), base, 10), A);
Matrix(1, 3, {(1, 1) = [3, 2, 1], (1, 2) = [3, 3, 3], (1, 3) = [4, 4]})
C := {};
for j to nops(A)-1 do if nops(convert(B[j], set)) = 1 then C := `union`(C, {A[j]}) end if end do;
C;
{3.33, 4.4}
Серьезный подход использует средства пакета ?StringTools .
Извините, Markiyan Hirnyk, но я не вижу, как можно применить Ваш совет конкретно, например, в такой задаче:
for n from 1 to 100000 do
for k from 1 to 100000 do
H:=n+2*k-1;
a:=H^2-n^2;
С:=2*H*n;
c:=H^2+n^2;
if igcd(a,b,c)=1 then print(a,b,c,n,k);
end if;
end do:end do;
Нужно отобрать все числа b, которые состоят только из одних четверок. Как это сделать?
for n from 1 to 100000 do
for k from 1 to 100000 do
H:=n+2*k-1;
a:=H^2-n^2;
С:=2*H*n;
c:=H^2+n^2;
if igcd(a,b,c)=1 then print(a,b,c,n,k);
end if;
end do:end do;
Нужно отобрать все числа b, которые состоят только из одних четверок. Как это сделать?
-
- Сообщения: 1366
- Зарегистрирован: Вс дек 04, 2011 11:07 pm
berg писал(а):Извините, Markiyan Hirnyk, но я не вижу, как можно применить Ваш совет конкретно, например, в такой задаче:
for n from 1 to 100000 do
for k from 1 to 100000 do
H:=n+2*k-1;
a:=H^2-n^2;
С:=2*H*n;
c:=H^2+n^2;
if igcd(a,b,c)=1 then print(a,b,c,n,k);
end if;
end do:end do;
Нужно отобрать все числа b, которые состоят только из одних четверок. Как это сделать?
Уважаемый berg! Я полностью ответил на Ваш вопрос, а Вы задаете другой, не связанный с предыдущим: нет массива, отбирать (куда?) числа b, которые состоят только из четверок. Это по меньшей мере не солидно и не производит о Вас положительного впечатления. Вы меня поняли?
Уважаемый berg! Я полностью ответил на Ваш вопрос, а Вы задаете другой, не связанный с предыдущим: нет массива, отбирать (куда?) числа b, которые состоят только из четверок. Это по меньшей мере не солидно и не производит о Вас положительного впечатления. Вы меня поняли?[/quote]
В моей программе на экран выводятся все результаты подряд. Из этого массива нужно отобрать числа b, состоящие из четверок. Что здесь не так?
Что касается положительного впечатления, то вы на этом форуме уже давно его не производите.
В моей программе на экран выводятся все результаты подряд. Из этого массива нужно отобрать числа b, состоящие из четверок. Что здесь не так?
Что касается положительного впечатления, то вы на этом форуме уже давно его не производите.
-
- Сообщения: 1366
- Зарегистрирован: Вс дек 04, 2011 11:07 pm
berg писал(а):В моей программе на экран выводятся все результаты подряд. Из этого массива нужно отобрать числа b, состоящие из четверок. Что здесь не так?
Что касается положительного впечатления, то вы на этом форуме уже давно его не производите.
Глубокоуважаемый berg! Увы, не знаю ответа на Ваш нечетко сформулированный второй вопрос (в коде отсутствует b). При случае посмотрите справку ?Array и какие бывают числа. Уточнение: в моем коде следует заменить nops(A)-1 на nops(op(3, A)). На этом категорически заканчиваю участие в этой теме.
Искренне, М.Г.
Уважаемый г-н berg! Хочу дать Вам два совета:
1) Если Вы намерены в чём-то как следует разобраться, то постарайтесь по-максимуму сделать это самому и только в крайнем случае обращаться за посторонней помощью. Уважаемый г-н M.Hirnyk написал Вам готовый код, а Вы вместо того, чтобы в нём разобраться, что решило бы все Ваши проблемы, задаёте новый вопрос.
2) Отвечу всё-же на Ваш последний вопрос. Так как у Вас все числа целые, то код M.Hirnyk можно значительно упростить. Если Вам нужно извлечь цифры натурального числа a в десятичной системе счисления, то можно использовать команду convert(a, base, 10) . Эта команда возвращает список цифр справа налево. Далее конвертируете этот список в множество и, если список состоит из одинаковых цифр, то полученное множество будет иметь всего 1 элемент, который извлекается из множества командой op .
Пример:
L1 := convert(1234, base, 10); L2 := convert(4444, base, 10);
S := convert(L2, set);
op(S);
L1 := [4, 3, 2, 1]
L2 := [4, 4, 4, 4]
S := {4}
4
1) Если Вы намерены в чём-то как следует разобраться, то постарайтесь по-максимуму сделать это самому и только в крайнем случае обращаться за посторонней помощью. Уважаемый г-н M.Hirnyk написал Вам готовый код, а Вы вместо того, чтобы в нём разобраться, что решило бы все Ваши проблемы, задаёте новый вопрос.
2) Отвечу всё-же на Ваш последний вопрос. Так как у Вас все числа целые, то код M.Hirnyk можно значительно упростить. Если Вам нужно извлечь цифры натурального числа a в десятичной системе счисления, то можно использовать команду convert(a, base, 10) . Эта команда возвращает список цифр справа налево. Далее конвертируете этот список в множество и, если список состоит из одинаковых цифр, то полученное множество будет иметь всего 1 элемент, который извлекается из множества командой op .
Пример:
L1 := convert(1234, base, 10); L2 := convert(4444, base, 10);
S := convert(L2, set);
op(S);
L1 := [4, 3, 2, 1]
L2 := [4, 4, 4, 4]
S := {4}
4
Тысячу раз извиняюсь, господа.
В силу своей непроходимой глупости я так и не понял, каким образом в приведённую мной программу вставить
команду convert(a, base, 10), чтобы на экран выводились результаты примерно в таком виде:
a, b, c
3, 4, 5
483, 44, 485
49283, 444, 49285
4937283, 4444, 4937285
Мой вопрос состоял именно в этом: какой оператор (или команда) будет выводить на экран числа a, b, c такие, в которых b состоит только из одинаковых цифр?
Мне очень неловко за возникшее по моей вине недоразумение.
В силу своей непроходимой глупости я так и не понял, каким образом в приведённую мной программу вставить
команду convert(a, base, 10), чтобы на экран выводились результаты примерно в таком виде:
a, b, c
3, 4, 5
483, 44, 485
49283, 444, 49285
4937283, 4444, 4937285
Мой вопрос состоял именно в этом: какой оператор (или команда) будет выводить на экран числа a, b, c такие, в которых b состоит только из одинаковых цифр?
Мне очень неловко за возникшее по моей вине недоразумение.
berg писал(а):... каким образом в приведённую мной программу вставить
команду convert(a, base, 10), чтобы на экран выводились результаты примерно в таком виде:
a, b, c
3, 4, 5
483, 44, 485
49283, 444, 49285
4937283, 4444, 4937285
Мой вопрос состоял именно в этом: какой оператор (или команда) будет выводить на экран числа a, b, c такие, в которых b состоит только из одинаковых цифр?
...
for n from 1 to 1000 do
for k from 1 to 1000 do
H:=n+2*k-1;
a:=H^2-n^2;
b:=2*H*n;
c:=H^2+n^2;
if igcd(a,b,c)=1 and nops(convert(convert(b, base, 10), set))=1 then print(a,b,c,n,k);
end if;
end do: end do;
Если Вы хотите, чтобы b не просто состояла из одинаковых цифр, а только, например, из четвёрок, то вместо nops(convert(convert(b, base, 10), set))=1 напишите op(convert(convert(b, base, 10), set))=4