Оставить в строке только один экземпляр каждого встречающегося символа.
s1 – исходная строка;
s2 – конечная строка;
s3 – переменная для очередного символа.
var s1,s2,s3: string; i: byte; begin write('String: '); readln(s1); s2 := ''; for i:=1 to length(s1) do begin s3 := copy(s1,i,1); if pos(s3,s2) = 0 then s2 := s2 + s3 end; writeln('String: ',s2); readln end.
Комментарии
Стоит ли преобразовывать?
Задача такая: Дано натуральное число n. Удалить из числа все вхождения тех цифр, которые входят в него ровно 2 раза.
Думаю, что придется преобразовывать в строку, считать вхождения, удалять, а потом обратно в число преобразовать... или нет?
Можно попробовать создать
Можно попробовать создать пару целочисленных массивов. В одном хранить все цифры, которые извлекаются из числа с помощью div и mod. Например, если число 23565, то массив получится [5, 6, 5, 3, 2].
Во втором массиве b хранить счетчики чисел. Для примера выше должно получиться так [0, 0, 1, 1, 0, 2, 1, 0, 0, 0].
Далее проверям счетчик цифры. Если он равен двум, то цифра не участвует в образовании числа.
Первая цифра нового числа умножается на 1, вторая на 10, третья на 100 и т.д. Потребуется еще счетчик и для этого.
Спасибо
Спасибо за решение. Извините, но не поняла, почему получился такой массив b, для Вашего примера я бы решила, что это [2,1,2,1,1]. Дальше проверять счетчик и в каждой итерации умножать на 10 ,там где это нужно, можно сразу сформировать нужное число. Хотя решение с преобразованием в строку мне кажется проще. Объясните в чем преимущества того или иного способа?
В моем варианте массива b
В моем варианте массива b первый элемент обозначает количество нулей, второй кол-во единиц и т.д до 9. Хотя можно и так как у вас.
Если решение с переводом в строку проще, то возможно так и следует решать. Однако бывает в заданиях подобного рода подразумевается именно алгебрарическое решение задачи.
Скорее всего существует способ решения вообще без массивов, но логически более сложный, включающий вложенный цикл.
Помогите разобраться с элементарщиной...
Здраствуйте, есть здача:
"Поменять порядок следования цифр в заданном натуральном числе N на обратный, удалив при этом из записи получаемого числа все вхождения цифры k."
С первой частью се понятно, поменять цифры местами не составляет труда, а вот каким образом удалить цифру из числа не могу понять, ведь это не строковый тип... или все же нужно привести к данному типу...?
удаление цифры из числа
Процедуры преобразования
Процедуры преобразования числа в строку и наоборот есть: https://pas1.ru/stringfunction (в конце статьи).
Но думаю, это не лучший способ решения этой задачи. Скорее всего, здесь требуется найти какой-нибудь арифметический алгоритм решения.
Что-то типа этого:
x := 148 // заданное число
y := 0 // будущее число-перевертыш
k := 4 // цифра для удаления
Пока x > 0 делать
___ a := x mod 10 := 8 // пишу числа для наглядности
___ x := x div 10 := 14
___ Если a k делать
______ y := y * 10 + a := 0 + 8 := 8
Перед второй итерацией цикла переменные выглядят так:
x := 14
y := 8
k := 4
Пока x > 0 делать
___ a := x mod 10 := 4
___ x := x div 10 := 1
___ Если a k делать // ложь! у не будет увеличен
______ y := y * 10 + a := 0 + 8 := 8
Третий проход:
x := 1
y := 8
k := 4
Пока x > 0 делать
___ a := x mod 10 := 1
___ x := x div 10 := 0
___ Если a k делать
______ y := y * 10 + a := 8 * 10 + 1 := 81