Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 13.06.2010, 10:40   #1
edrushh
Новичок
Джуниор
 
Регистрация: 13.06.2010
Сообщений: 5
По умолчанию вывод n элементов

Hello. Есть такая задача, вроде бы простая, но у меня от неё полный тупняк!
Задача: Вводим число N. Нужно вывести все n-разрядные числа, в которых все эдементы разные.

Вопрос: Какой алгоритм выбрать? создаём массив из n элементов и начинаем заполнять его по очерёдности, при этом проверяя не равняются ли элементы массива друг другу, если нет, то пишем все элементы массива на экран?

или есть проще вариант?
edrushh вне форума Ответить с цитированием
Старый 13.06.2010, 11:42   #2
Grag
А может и не...
Участник клуба
 
Аватар для Grag
 
Регистрация: 27.03.2010
Сообщений: 1,269
По умолчанию

Я так это понимаю... Допустим, задали число 3, тогда нужно вывести все числа от 100 до 999, в которых все цифры разные, т.е. 102, 103, 104, и т.д.
Т.е. в этих числах нет повторяющихся цифр, т.е. 101, 111, 222, 202 уже не подходят...
Если договоримся - сделаю... Pascal, Delphi.
Контакты:
e-mail: delmas-61@mail.ru
icq: 585281783
Skype: delmas61
Перемешивай дело с бездельем и не сойдешь с ума...

Последний раз редактировалось Grag; 13.06.2010 в 11:47.
Grag вне форума Ответить с цитированием
Старый 13.06.2010, 12:05   #3
eoln
Старожил
 
Аватар для eoln
 
Регистрация: 26.04.2008
Сообщений: 2,645
По умолчанию

Ну если вопрос в алгоритме, то перебираем все целые числа в цикле от exp((N-1)*ln(10)) до exp((N)*ln(10))-1 - это нам даст все N-разрядные числа. Каждое k-тое число разлагаем на цифры и проверяем её на повторность, примерно так
Код:
while k>0 do begin
  d:=k mod 10;
  k:=k div 10
end;
Каждую цифру d из цикла добавляем во временный массив или множество (не забываем перед циклом сбрасывать массив/множество). Перед добавление проверяем наличие добавляемого элемента в массиве/множестве, если совпадение нашлось, значит число не подходит
eoln вне форума Ответить с цитированием
Старый 13.06.2010, 12:22   #4
edrushh
Новичок
Джуниор
 
Регистрация: 13.06.2010
Сообщений: 5
По умолчанию

спасибо за скорую помощь!
edrushh вне форума Ответить с цитированием
Старый 13.06.2010, 12:26   #5
edrushh
Новичок
Джуниор
 
Регистрация: 13.06.2010
Сообщений: 5
По умолчанию

можно поподробнее с экспонентой? например вводим 3, и как ему обьяснить, что числа со 100 до 999 будут перечисляться?
edrushh вне форума Ответить с цитированием
Старый 13.06.2010, 13:48   #6
eoln
Старожил
 
Аватар для eoln
 
Регистрация: 26.04.2008
Сообщений: 2,645
По умолчанию

exp((N-1)*ln(10)) означает 10^(N-1) при N=3 получаем 10^2=100
exp((N)*ln(10))-1 означает 10^N - 1 при N=3 получаем 10^3 -1=1000-1=999

Общая формула a^b = exp(b*ln(a))
eoln вне форума Ответить с цитированием
Старый 13.06.2010, 14:05   #7
edrushh
Новичок
Джуниор
 
Регистрация: 13.06.2010
Сообщений: 5
По умолчанию

круто, спасибо! не знал...
edrushh вне форума Ответить с цитированием
Старый 13.06.2010, 14:40   #8
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

а можно границы можно найти и так, без использования возведения в степень и логарифмов :
Код:
  WriteLn('Введите размерность N: ');
  ReadLn(N);
  GrMin := 1; 
  for i:=1 to (N-1) do GrMin := GrMin * 10;
  GrMax := GrMin * 10 - 1;

  {дальше цикл проверки чисел от GrMin до GrMax}
Serge_Bliznykov вне форума Ответить с цитированием
Старый 13.06.2010, 16:12   #9
edrushh
Новичок
Джуниор
 
Регистрация: 13.06.2010
Сообщений: 5
По умолчанию

В чём ошибка в циклах? Максимальное и минимальное значения выводит и всё! извиняюсь, что много переменных - но мне так проще понять - пойму перепишу! код cpp:




#include <iostream>
#include <math.h>

using namespace std;

int step_x(int x) {
x=exp((x)*log(10))-1; // Максимальное значение степени числа
return x;
}
int step_y(int x) {
int y;
y=exp((x-1)*log(10)); // Минимальное значение степени числа
return y;
}




int main() {
int a,x,y;
cout << "Введите степень в которую возвести : ";
cin >> a;

x=step_x(a);
cout << " Максимальное значение этой степени = " << x << endl;
y=step_y(a);
cout << "Минимальное число в этой степени = " << y << endl;

while (x>y) {
int d;
int b[100];
int i=1;
d=x;
while (d>0) {
b[i]=d%10; // типа заполнил массив
i++;
d=d/10;
}
int e;
int p=0;
e=b[i];
i=i-1;
for (i; i>0; i--) { // проверяю не равняется ли последняя цифра преведущей
if (e==b[i])
p=1;
}
if (p==0) {
cout << " Число " << x << " подходит по условию"<< endl;
}
x--;
}
}

Последний раз редактировалось edrushh; 13.06.2010 в 16:52.
edrushh вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вывод элементов массива.Изменение элементов массива. Vesnushka18 Помощь студентам 6 09.06.2011 13:05
вывод элементов из массива kirosin PHP 3 15.05.2010 13:00
Вывод значения элементов массива valdemar593 Общие вопросы C/C++ 7 22.12.2009 21:37
Вывод элементов матрицы tomsoier Общие вопросы C/C++ 1 13.12.2009 15:13
Вывод ненулевых элементов массива Ci_novice Общие вопросы C/C++ 2 28.12.2007 14:59