2 Sasha
а примечание в виде "БЕЗ МАССИВОВ! " Вы видели? :)
"Если без масивов, то нужно знать сколько цифр вводиться и уже столько же создавать переменных" - извините, но это бред.
Итак, по теме:
Если у Вас стоит условие "без использования массивов", то конечно это сделать можно, но заранее ясно, что самый простой способ - это с их использованием. Итак, не знаю, каким языком Вы пользуетесь, поэтому напишу общий смысл:
Нужно написать простую функцию, у которой будет входными параметрами являться число и делитель (делители у нас 10, 100, 1000, 10000, ..до тех под пока есть результат) , а на выходе будет остаток от целочисленного деления. Использовать эту функцию нужно следующим образом:
цикл по i с шагом i=i*10. Закидываем функцию с нашим числом в цикл, результат записываем в переменную temp1, а финальный_результат будет Result=Result+temp1*нынешний_делитель. Начиная с i>10 у нас будет уже два числа Result и temp1, которые можно сравнивать посредством рекурсивного вызова нашей функции но в обратном порядке (т. е. от нынешнего_делителя до 10), результат рекурсии записывать в temp2. Числа temp1 и temp2 сравниваются очень легко, и, если нужно их поменять, то
Result=Result - temp2*старый_делитель_temp2 + temp1*старый_делитель_temp2 + temp2*делитель_temp1
(для замены можно написать отдельную процедуру, входными параметрами которой будет temp1, делитель_temp1, temp2, делитель_temp2)
Таким образом решается проблема с тем, что заранее не ясно сколько порядков в числе. Итого всего 5-6 переменных, 1 функция и 1 процедура.
Другие языки программирования и технологии
паскаль - Дано натуральное число п. Переставить его цифры так, чтобы образовалось наименьшее число
и в чом сложность, берёте метод пузирей и вперёд, а вот без массивов это уже маразм.. . каждый элемент строки или числа можно трактовать как массив битов)
Ну если без массивов, то на списках. )))
А вообще идея такая, что отсортировать цифры, и записать так чтоб самая маленькая была слева, а самая большая справа, это и будет наименьшее число.
А вообще идея такая, что отсортировать цифры, и записать так чтоб самая маленькая была слева, а самая большая справа, это и будет наименьшее число.
извеняй, без массивов ипаца - себе дороже.. .
переделывай число в char массив, и перетасовывай в цикле...
переделывай число в char массив, и перетасовывай в цикле...
Наверное сначала преобразуется в строку метод inttostr или floattostr, точно не помню. Потом разбирается на циферки и дальше уже начинается сравнение разных выражений.
Что то похоже делал давно, но там просто сортировка по убыванию. Потом нужно просто обработать массив (Memo) снизу в верх и получиться минимальное число из заданого рандомом массива чисел. Если без масивов, то нужно знать сколько цифр вводиться и уже столько же создавать переменных и уже сними работать - ну на мой взглят это титанический труд.
iprocedure TForm1.BitBtn1Click(Sender: TObject);
var i,t,max,min,n,j:integer;
begin
BitBtn1.Enabled:=false;
Memo2.Clear;
max:=strtoint(Memo1.Lines[0]);
min:=strtoint(Memo1.Lines[0]);
n:=0;
j:=-1;
for i:=0 to (Memo1.Lines.Count)-1 do
begin
if strtoint(Memo1.Lines) > max then max:=strtoint(Memo1.Lines);
end;
for t:=0 to (Memo1.Lines.Count)-1 do
begin
if strtoint(Memo1.Lines[t]) < min then min:=strtoint(Memo1.Lines[t]);
end;
Memo2.Lines.Add('Min = '+inttostr(min));
Memo2.Lines.Add('Max = '+inttostr(max));
Memo2.Lines.Add('Выполнение');
while n=0 do
begin
j:=j+1;
if j=Memo1.Lines.Count then
begin
j:=0;
max:=max -1;
end;
if strtoint(Memo1.Lines[j])=max then
begin
Memo2.Lines.Add(inttostr(max));
end;
if max < min then n:=1;
end;
Memo2.Lines.Add('Сортировка по убыванию успешно завершина');
BitBtn1.Enabled:=True;
end;
end.
iprocedure TForm1.BitBtn1Click(Sender: TObject);
var i,t,max,min,n,j:integer;
begin
BitBtn1.Enabled:=false;
Memo2.Clear;
max:=strtoint(Memo1.Lines[0]);
min:=strtoint(Memo1.Lines[0]);
n:=0;
j:=-1;
for i:=0 to (Memo1.Lines.Count)-1 do
begin
if strtoint(Memo1.Lines) > max then max:=strtoint(Memo1.Lines);
end;
for t:=0 to (Memo1.Lines.Count)-1 do
begin
if strtoint(Memo1.Lines[t]) < min then min:=strtoint(Memo1.Lines[t]);
end;
Memo2.Lines.Add('Min = '+inttostr(min));
Memo2.Lines.Add('Max = '+inttostr(max));
Memo2.Lines.Add('Выполнение');
while n=0 do
begin
j:=j+1;
if j=Memo1.Lines.Count then
begin
j:=0;
max:=max -1;
end;
if strtoint(Memo1.Lines[j])=max then
begin
Memo2.Lines.Add(inttostr(max));
end;
if max < min then n:=1;
end;
Memo2.Lines.Add('Сортировка по убыванию успешно завершина');
BitBtn1.Enabled:=True;
end;
end.
Похожие вопросы
- Паскаль. Дано натуральное число. Верно ли , что цифра А встречается в нем более К раз.
- Дано натуральное число m.Переставьте местами первую и вторую цифры этого числа Pascal ABC.NET
- Дано натуральное число п. Найти знакочередующуюся сумму цифр числа n:
- Дано натуральное число. Определить количество его цифр, кратных z. Написать в Паскаль
- Помогите пожалуйста!Паскаль. Дано натуральное число N. Получить наименьшее число вида 2(m в степени), превосходящее N.
- Дано 4х число. Найти наименьшую нечетную цифру в числовой записи данного числа. Если вводим 0,то выводится 0.Что не так?
- помогите написать програму в паскале. Задано натуральное число х. вывести все двознначные числа ,сума которых меньше х.
- Дано число. Переставить цифры так чтобы образовалось наименьшее.
- Паскаль. Дано натуральное n. Вычислить используя цикл с постусловием + алгоритм
- циклы с++ Дано натуральное N. Найти сумму всех цифр числа и вывести на экран все цифры в обратном порядке.