Страница 1 из 1
Простая задача на Pascal'е
Добавлено: 14 окт 2007, 15:49
Kasim
Необходимо записать в массив все трехзначные числа, не имеющие в своей десятичной записи одинаковых цифр(операции деления использовать не дают).
У меня кроме как с div/mod никак это реализовать не получается.
Заранее благодарен.
Re: Простая задача на Pascal'е
Добавлено: 14 окт 2007, 19:07
Serge_Bliznykov
делайте три цикла вложенные друг в друга и при этом проверяйте, что
все три числа разные! примерно так:
Код: Выделить всё
for i:=1 to 9 do
for j:=0 to 9 do
for k:=0 to 9 do
begin
if (i<>j) and (j<>k) and (i<>k) then
Добавляем в массив число = i*100 + j*10 + k
end;
Re: Простая задача на Pascal'е
Добавлено: 14 окт 2007, 19:18
Kasim
Огромное спасибо!

Re: Простая задача на Pascal'е
Добавлено: 14 окт 2007, 20:04
Новенький
а я немного по другому сделал, с использованием строкового типа:
Код: Выделить всё
uses crt; {подключение модулей}
var i,j,k:integer; {счетчикм: сотни, десятки, еденицы}
sot, des, edin:string; {строковые переменные для сотен, десятков ,единиц}
mass, r:integer; {переменная для 3-х значного числа}
massiv:array[1..900]of integer; {текстовый массив под числа}
chislo:string; {переменная под число}
begin
clrscr; {очистка экрана}
i:=1; {первоначальное значение сотен}
j:=0; {первоначальное значение десятков}
k:=0; {первоначальное значение едениц}
while i<10 do {счетчик на сотни}
begin
while j<10 do {счетчик на десятки}
begin
if j<>i {если десятки и сотни не совпадают}
then begin
while k<10 do {то делаем цикл на еденицы}
begin
if (k<>j)and(k<>i) {если цифры не совпадают}
then begin
{то переводим значения счетчиков в строковые типы}
str(i,sot);
str(j,des);
str(k,edin);
chislo:=sot+des+edin; {формируем 3-х значное число(строка)}
val(chislo, mass, r); {переводим строку в число,
r содержит номер первого символа, который не может
входить в запись числа, в данной программе она всегда
равна 0}
k:=k+1; {увеличиваем единицы}
end
else k:=k+1; {иначе увеличиваем единицы и повторяем цикл}
end;
j:=j+1; {увеличиваем десятки}
k:=0; {обнуляем еденицы}
end
else j:=j+1; {иначе увеличиваем десятки}
end;
i:=i+1; {увеличиваем сотни}
j:=0; {обнуляем десятки}
k:=0; {обнуляем единицы}
end;
end.

но предложенный выше вариант, думаю проще
Re: Простая задача на Pascal'е
Добавлено: 15 окт 2007, 19:34
Хыиуду
Зачем же так сложно?
Код: Выделить всё
for i:=100 to 999 do
begin
s:=str(i);
if s[1]<>s2 and s[2]<>s[3] and s[1]<>s[3] then
занести в массив число i
end;
Re: Простая задача на Pascal'е
Добавлено: 16 окт 2007, 10:15
Новенький

действоительно, элементарно просто
Re: Простая задача на Pascal'е
Добавлено: 16 окт 2007, 11:35
Хыиуду
Новенький, в принципе понятно ваше желание оптимизировать код (например, не перебирать все единицы там, где совпадают сотни и десятки), но так как трехзначных чисел всего 900, то и программе надо сделать максимум 900 проверок, а это для современных компьютеров ничто. Так что здесь оптимизация будет даже вредна - делает код более сложным, а выигрыш во времени ничтожный.