Необходимо записать в массив все трехзначные числа, не имеющие в своей десятичной записи одинаковых цифр(операции деления использовать не дают).
У меня кроме как с div/mod никак это реализовать не получается.
Заранее благодарен.
Простая задача на Pascal'е
-
- Сообщения: 375
- Зарегистрирован: 31 авг 2007, 03:06
делайте три цикла вложенные друг в друга и при этом проверяйте, что
все три числа разные! примерно так:
все три числа разные! примерно так:
Код: Выделить всё
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;
- Новенький
- Сообщения: 73
- Зарегистрирован: 01 июн 2007, 17:35
- Откуда: Чусовой (Пермский край)
- Контактная информация:
а я немного по другому сделал, с использованием строкового типа:
но предложенный выше вариант, думаю проще
Код: Выделить всё
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.

Программирование - хорошая штука
Зачем же так сложно?
Код: Выделить всё
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;
Искусство программирования - заставить компьютер делать все то, что вам делать лень.
Для "спасибо" есть кнопка "Спасибо" в виде звездочки внизу под ником автора поста.
Для "спасибо" есть кнопка "Спасибо" в виде звездочки внизу под ником автора поста.
Новенький, в принципе понятно ваше желание оптимизировать код (например, не перебирать все единицы там, где совпадают сотни и десятки), но так как трехзначных чисел всего 900, то и программе надо сделать максимум 900 проверок, а это для современных компьютеров ничто. Так что здесь оптимизация будет даже вредна - делает код более сложным, а выигрыш во времени ничтожный.
Искусство программирования - заставить компьютер делать все то, что вам делать лень.
Для "спасибо" есть кнопка "Спасибо" в виде звездочки внизу под ником автора поста.
Для "спасибо" есть кнопка "Спасибо" в виде звездочки внизу под ником автора поста.