Простая задача на Pascal'е

Ответить
Аватара пользователя
Kasim
Сообщения: 4
Зарегистрирован: 14 окт 2007, 15:32

Необходимо записать в массив все трехзначные числа, не имеющие в своей десятичной записи одинаковых цифр(операции деления использовать не дают).
У меня кроме как с div/mod никак это реализовать не получается.
Заранее благодарен.
Serge_Bliznykov
Сообщения: 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;
Аватара пользователя
Kasim
Сообщения: 4
Зарегистрирован: 14 окт 2007, 15:32

Огромное спасибо! :D
Аватара пользователя
Новенький
Сообщения: 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.
:) но предложенный выше вариант, думаю проще
Программирование - хорошая штука
Хыиуду
Сообщения: 2442
Зарегистрирован: 06 мар 2005, 21:03
Откуда: Москва
Контактная информация:

Зачем же так сложно?

Код: Выделить всё

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;
Искусство программирования - заставить компьютер делать все то, что вам делать лень.
Для "спасибо" есть кнопка "Спасибо" в виде звездочки внизу под ником автора поста.
Аватара пользователя
Новенький
Сообщения: 73
Зарегистрирован: 01 июн 2007, 17:35
Откуда: Чусовой (Пермский край)
Контактная информация:

:) действоительно, элементарно просто
Программирование - хорошая штука
Хыиуду
Сообщения: 2442
Зарегистрирован: 06 мар 2005, 21:03
Откуда: Москва
Контактная информация:

Новенький, в принципе понятно ваше желание оптимизировать код (например, не перебирать все единицы там, где совпадают сотни и десятки), но так как трехзначных чисел всего 900, то и программе надо сделать максимум 900 проверок, а это для современных компьютеров ничто. Так что здесь оптимизация будет даже вредна - делает код более сложным, а выигрыш во времени ничтожный.
Искусство программирования - заставить компьютер делать все то, что вам делать лень.
Для "спасибо" есть кнопка "Спасибо" в виде звездочки внизу под ником автора поста.
Ответить